#include <simgear/compiler.h>
#include <ctime>
+#include <memory> // for std::auto_ptr
+#include <string>
-#include <simgear/timing/timezone.h>
-
-
+// forward decls
+class SGPath;
+class SGGeod;
+
/**
* A class to calculate and manage a variety of time parameters.
* The SGTime class provides many real-world time values. It
class SGTime {
private:
- // tzContainer stores all the current Timezone control points/
- SGTimeZoneContainer* tzContainer;
// Points to the current local timezone name;
std::string zonename;
time_t cur_time;
// Break down of equivalent GMT time
-#if defined(_MSC_VER) || defined(__MINGW32__)
struct tm m_gmt; // copy of system gmtime(&time_t) structure
-#else
- struct tm *gmt;
-#endif
// offset of local time relative to GMT
time_t local_offset;
double gst_diff;
/** init common constructor code */
- void init( double lon_rad, double lat_rad, const std::string& root,
+ void init( const SGGeod& location, const SGPath& root,
time_t init_time );
public:
* @param root root path point to data file location (timezone, etc.)
* @param init_time provide an initialization time, 0 means use
current clock time */
- SGTime( double lon_rad, double lat_rad, const std::string& root,
- time_t init_time );
+ SGTime( const SGGeod& location, const SGPath& root,
+ time_t init_time );
/**
* Create an instance given a data file path.
* @param root root path point to data file location (timezone, etc.)
*/
- SGTime( const std::string& root );
+ SGTime( const SGPath& root );
/** Destructor */
~SGTime();
clock time
* @param warp an optional time offset specified in seconds. This
* allows us to advance or rewind "time" if we choose to. */
- void update( double lon_rad, double lat_rad, time_t ct, long int warp );
+ void update( const SGGeod& location, time_t ct, long int warp );
+
+ /** Deprecated method. To be removed after the next release... */
+ void update( double lon_rad, double lat_rad, time_t ct, long int warp ) DEPRECATED;
/**
* Given lon/lat, update timezone information and local_offset
* @param lon_rad current longitude (radians)
* @param lat_rad current latitude (radians)
* @param root base path containing time zone directory */
- void updateLocal( double lon_rad, double lat_rad, const std::string& root );
+ void updateLocal( const SGGeod& location, const std::string& root );
/** @return current system/unix time in seconds */
inline time_t get_cur_time() const { return cur_time; };
inline const char * get_zonename() const { return zonename.c_str(); }
/** @return GMT in a "brokent down" tm structure */
-#if defined(_MSC_VER) || defined(__MINGW32__)
inline struct tm* getGmt()const { return (struct tm *)&m_gmt; };
-#else
- inline struct tm* getGmt()const { return gmt; };
-#endif
/** @return julian date */
inline double getJD() const { return jd; };