From: John F. <jo...@us...> - 2015-04-20 13:53:44
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21470 Modified Files: UtcOffsetTable.h UtcOffsetTable.cpp Log Message: Additions re. leap years Index: UtcOffsetTable.cpp =================================================================== RCS file: /cvsroot/ingex/ingex/common/UtcOffsetTable.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** UtcOffsetTable.cpp 3 Apr 2013 13:00:47 -0000 1.1 --- UtcOffsetTable.cpp 20 Apr 2015 13:53:41 -0000 1.2 *************** *** 25,28 **** --- 25,29 ---- #include <cstdlib> #include <cstring> + #include <cstdio> #include "UtcOffsetTable.h" *************** *** 47,76 **** struct tm ttm; ! mTable.push_back(std::make_pair<time_t, int>(0, offset++)); ! strptime("1972-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1972-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1973-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1974-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1975-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1976-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1977-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1981-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1982-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1983-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1985-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1987-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1989-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1990-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1992-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1993-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1994-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1995-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1997-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1998-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("2005-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("2008-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("2012-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); // restore time zone --- 48,89 ---- struct tm ttm; ! // Table is pairs of < TAI time, offset TAI - UTC> ! // where TAI time is time of a leap second ! // and offset is the offset in effect after the leap second ! mTable.push_back(std::make_pair<time_t, int>(0, offset)); ! strptime("1972-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1972-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1973-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1974-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1975-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1976-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1977-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1981-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1982-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1983-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1985-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1987-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1989-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1990-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1992-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1993-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1994-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1995-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1997-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1998-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2005-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2008-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2012-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2015-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! ! // debug ! #if 0 ! for (std::vector< std::pair<time_t, int> >::const_iterator it = mTable.begin(); it != mTable.end(); ++it) ! { ! printf("%ld %d\n", (long) it->first, it->second); ! } ! #endif // restore time zone *************** *** 91,95 **** for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (tai - it->second >= it->first) { offset = it->second; --- 104,108 ---- for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (tai > it->first) { offset = it->second; *************** *** 100,103 **** --- 113,133 ---- } + int UtcOffsetTable::LeapByTai(time_t tai) + { + int leap = 0; + for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) + { + if (tai >= it->first) + { + if (tai == it->first) + { + leap = 1; + } + break; + } + } + return leap; + } + int UtcOffsetTable::OffsetByUtc(time_t utc) { *************** *** 105,109 **** for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (utc >= it->first) { offset = it->second; --- 135,139 ---- for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (utc + it->second > it->first) { offset = it->second; Index: UtcOffsetTable.h =================================================================== RCS file: /cvsroot/ingex/ingex/common/UtcOffsetTable.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** UtcOffsetTable.h 3 Apr 2013 13:00:47 -0000 1.1 --- UtcOffsetTable.h 20 Apr 2015 13:53:41 -0000 1.2 *************** *** 42,45 **** --- 42,46 ---- int OffsetByUtc(time_t utc); int OffsetByTai(time_t tai); + int LeapByTai(time_t tai); protected: |