* timezone.h
* Written by Durk Talsma. Started July 1999.
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
+ * Library General Public License for more details.
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * 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 "geocoord.h"
-#include <stdio.h>
+#include <string>
+#include <vector>
+
+#include <simgear/math/SGMath.hxx>
+#include <simgear/math/SGGeod.hxx>
-class Timezone : public GeoCoord
+/**
+ * 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 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;
};