]> git.mxchange.org Git - simgear.git/blobdiff - simgear/timing/sg_time.hxx
Fix a problem for systems with older headers
[simgear.git] / simgear / timing / sg_time.hxx
index e075cd9621026dd4116a895ad1e2d9785ff7c916..fb23ddf50e13e995201cb39ade81d6f4282495e7 100644 (file)
@@ -69,16 +69,16 @@ class SGTime {
 
 private:
     // tzContainer stores all the current Timezone control points/
-    TimezoneContainer* tzContainer;
+    SGTimeZoneContainer* tzContainer;
 
     // Points to the current local timezone name;
-    char *zonename;
+    string zonename;
 
     // Unix "calendar" time in seconds
     time_t cur_time;
 
     // Break down of equivalent GMT time
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__MINGW32__)
     struct tm m_gmt;    // copy of system gmtime(&time_t) structure
 #else
     struct tm *gmt;
@@ -104,6 +104,10 @@ private:
     // gst_diff has pretty good accuracy over the span of a couple hours
     double gst_diff;
 
+    /** init common constructor code */
+    void init( double lon_rad, double lat_rad, const string& root,
+               time_t init_time );
+
 public:
 
     /** Default constructor */
@@ -120,10 +124,13 @@ public:
      * If you don't know your position when you call the SGTime
      * constructor, you can just use the first form (which assumes 0,
      * 0).
-     * @param lon current longitude
-     * @param lat current latitude
-     * @param root root path point to data file location (timezone, etc.)  */
-    SGTime( double lon, double lat, const string& root );
+     * @param lon_rad current longitude (radians)
+     * @param lat_rad current latitude (radians)
+     * @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 string& root,
+            time_t init_time );
 
     /**
      * Create an instance given a data file path.
@@ -141,11 +148,13 @@ public:
      * you to offset "sim" time relative to "real" time. The update()
      * method is designed to be called by the host application before
      * every frame.
-     * @param lon current longitude
-     * @param lat current latitude
+     * @param lon_rad current longitude (radians)
+     * @param lat_rad current latitude (radians)
+     * @param ct specify a unix time, otherwise specify 0 to use current
+              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, double lat, long int warp = 0 );
+    void update( double lon_rad, double lat_rad, time_t ct, long int warp );
 
     /**
      * Given lon/lat, update timezone information and local_offset
@@ -154,19 +163,19 @@ public:
      * enough that your timezone may have changed as well. In the
      * FlightGear project we call updateLocal() every few minutes from
      * our periodic event manager.
-     * @param lon current longitude
-     * @param lat current latitude
+     * @param lon_rad current longitude (radians)
+     * @param lat_rad current latitude (radians)
      * @param root base path containing time zone directory */
-    void updateLocal( double lon, double lat, const string& root );
+    void updateLocal( double lon_rad, double lat_rad, const string& root );
 
     /** @return current system/unix time in seconds */
     inline time_t get_cur_time() const { return cur_time; };
 
     /** @return time zone name for your current position*/
-    inline char* get_zonename() const { return zonename; }
+    inline const char * get_zonename() const { return zonename.c_str(); }
 
     /** @return GMT in a "brokent down" tm structure */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__MINGW32__)
     inline struct tm* getGmt()const { return (struct tm *)&m_gmt; };
 #else
     inline struct tm* getGmt()const { return gmt; };
@@ -231,12 +240,22 @@ inline time_t sgTimeGetGMT(struct tm* the_time) {
  * @return modified julian date */
 double sgTimeCalcMJD(int mn, double dy, int yr);
 
+/**
+ * \relates SGTime
+ * Given an optional offset from current time calculate the current
+ * modified julian date.
+ * @param ct specify a unix time, otherwise specify 0 to use current
+          clock time
+ * @param warp number of seconds to offset from current time (0 if no offset)
+ * @return current modified Julian date (number of days elapsed
+ * since 1900 jan 0.5), mjd. */
+double sgTimeCurrentMJD( time_t ct /* = 0 */, long int warp /* = 0 */ );
+
 /**
  * \relates SGTime
  * Given an mjd, calculate greenwich mean sidereal time, gst
  * @param mjd modified julian date
- * @return greenwich mean sidereal time (gst)
- */
+ * @return greenwich mean sidereal time (gst) */
 double sgTimeCalcGST( double mjd );
 
 /**