* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
**************************************************************************/
-/*************************************************************************
+/** \file timezone.h
*
- * Timezone is derived from geocoord, and stores the timezone centerpoint,
- * as well as the countrycode and the timezone descriptor. The latter is
- * used in order to get the local time.
+ * Provides SGTimeZone and SGTimeZoneContainer
*
- ************************************************************************/
+ */
#ifndef _TIMEZONE_H_
#define _TIMEZONE_H_
-#include <stdio.h>
+#include <string>
+#include <vector>
-#include <simgear/timing/geocoord.h>
+#include <simgear/math/SGMath.hxx>
+#include <simgear/math/SGGeod.hxx>
+
+/**
+ * SGTimeZone stores the timezone centerpoint,
+ * as well as the countrycode and the timezone descriptor. The latter is
+ * used in order to get the local time.
+ *
+ */
-class Timezone : public GeoCoord
+class SGTimeZone
{
+
private:
- char* countryCode;
- char* descriptor;
+
+ SGVec3d centerpoint; // centre of timezone, in cartesian coordinates
+ std::string countryCode;
+ std::string descriptor;
public:
- Timezone() :
- GeoCoord()
- {
- countryCode = 0;
- descriptor = 0;
- };
- Timezone(float la, float lo, char* cc, char* desc);
- Timezone(const char *infoString);
- Timezone(const Timezone &other);
- virtual ~Timezone() { delete [] countryCode; delete [] descriptor; };
-
- virtual void print() { printf("%s", descriptor);};
- virtual char * getDescription() { return descriptor; };
+ /**
+ * Build a timezone object with a specifed latitude, longitude, country
+ * code, and descriptor
+ * @param pt centerpoint
+ * @param cc country code
+ * @param desc descriptor
+ */
+ SGTimeZone(const SGGeod& pt, char* cc, char* desc);
+
+ /**
+ * Build a timezone object from a textline in zone.tab
+ * @param infoString the textline from zone.tab
+ */
+ SGTimeZone(const char *infoString);
+
+ /**
+ * The copy constructor
+ * @param other the source object
+ */
+ SGTimeZone(const SGTimeZone &other);
+
+ /**
+ * Return the descriptor string
+ * @return descriptor string (char array)
+ */
+ const char * getDescription() { return descriptor.c_str(); };
+
+ const SGVec3d& cartCenterpoint() const
+ {
+ return centerpoint;
+ }
};
-/************************************************************************
- * Timezone container is derived from GeoCoordContainer, and has some
- * added functionality.
- ************************************************************************/
+/**
+ * SGTimeZoneContainer
+ */
-class TimezoneContainer : public GeoCoordContainer
+class SGTimeZoneContainer
{
- public:
- TimezoneContainer(const char *filename);
- virtual ~TimezoneContainer();
+public:
+ SGTimeZoneContainer(const char *filename);
+ ~SGTimeZoneContainer();
+
+ SGTimeZone* getNearest(const SGGeod& ref) const;
+
+private:
+ typedef std::vector<SGTimeZone*> TZVec;
+ TZVec zones;
};