Decouple sg_time code from the current time(NULL), i.e. you can run the

time calculations for an alternate calendar time (i.e. if the application
is being driven from an external source of data.)

Fix a bug in sg_binobj.cxx which disrupted the 'broken down time' globally
for the entire application.
This commit is contained in:
curt
2002-02-11 22:27:27 +00:00
parent fe0076e291
commit 7a65a990ba
3 changed files with 31 additions and 10 deletions

View File

@@ -205,11 +205,18 @@ bool SGBinObject::read_bin( const string& file ) {
// read creation time
time_t calendar_time;
sgReadLong( fp, &calendar_time );
#if 0
// The following code has a global effect on the host application
// and can screws up the time elsewhere. It should be avoided
// unless you need this for debugging in which case you should
// disable it again once the debugging task is finished.
struct tm *local_tm;
local_tm = localtime( &calendar_time );
char time_str[256];
strftime( time_str, 256, "%a %b %d %H:%M:%S %Z %Y", local_tm);
// cout << "File created on " << time_str << endl;
cout << "File created on " << time_str << endl;
#endif
// read number of top level objects
short nobjects;

View File

@@ -70,7 +70,8 @@ static const double J2000 = 2451545.0 - MJD0;
static const double SIDRATE = 0.9972695677;
SGTime::SGTime( double lon, double lat, const string& root, time_t init_time )
void SGTime::init( double lon, double lat,
const string& root, time_t init_time )
{
SG_LOG( SG_EVENT, SG_INFO, "Initializing Time" );
@@ -108,14 +109,19 @@ SGTime::SGTime( double lon, double lat, const string& root, time_t init_time )
}
}
SGTime::SGTime( double lon, double lat, const string& root, time_t init_time )
{
init( lon, lat, root, init_time );
}
SGTime::SGTime( const string& root ) {
SGTime( 0.0, 0.0, root );
init( 0.0, 0.0, root, 0 );
}
SGTime::SGTime() {
SGTime( 0.0, 0.0, "" );
init( 0.0, 0.0, "", 0 );
}
@@ -158,7 +164,7 @@ static double sidereal_precise( double mjd, double lng )
// return a courser but cheaper estimate of sidereal time
static double sidereal_course( time_t cur_time, struct tm *gmt, double lng )
static double sidereal_course( time_t cur_time, const struct tm *gmt, double lng )
{
time_t start_gmt, now;
double diff, part, days, hours, lstTmp;
@@ -228,7 +234,7 @@ void SGTime::update( double lon, double lat, time_t ct, long int warp ) {
<< gmt->tm_sec );
// calculate modified Julian date starting with current
mjd = sgTimeCurrentMJD( warp );
mjd = sgTimeCurrentMJD( ct, warp );
// add in partial day
mjd += (gmt->tm_hour / 24.0) + (gmt->tm_min / (24.0 * 60.0)) +
@@ -379,7 +385,12 @@ double sgTimeCurrentMJD( time_t ct, long int warp ) {
// get current Unix calendar time (in seconds)
// warp += warp_delta;
time_t cur_time = time(NULL) + warp;
time_t cur_time;
if ( ct ) {
cur_time = ct + warp;
} else {
cur_time = time(NULL) + warp;
}
SG_LOG( SG_EVENT, SG_DEBUG,
" Current Unix calendar time = " << cur_time
<< " warp = " << warp );

View File

@@ -125,7 +125,7 @@ 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, double lat, const string& root, time_t init_time = 0 );
SGTime( double lon, double lat, const string& root, time_t init_time /* = 0 */ );
/**
* Create an instance given a data file path.
@@ -136,6 +136,9 @@ public:
/** Destructor */
~SGTime();
/** init common constructor code */
void init( double lon, double lat, const string& root, time_t init_time /* = 0 */ );
/**
* Update the time related variables.
* The update() method requires you to pass in your position and
@@ -149,7 +152,7 @@ public:
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, time_t ct = 0, long int warp = 0 );
void update( double lon, double lat, time_t ct /* = 0 */, long int warp /* = 0 */ );
/**
* Given lon/lat, update timezone information and local_offset
@@ -244,7 +247,7 @@ double sgTimeCalcMJD(int mn, double dy, int yr);
* @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 );
double sgTimeCurrentMJD( time_t ct /* = 0 */, long int warp /* = 0 */ );
/**
* \relates SGTime