Changeset 3712 for trunk/psLib/src/astro/psTime.c
- Timestamp:
- Apr 18, 2005, 4:13:53 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/astro/psTime.c (modified) (28 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astro/psTime.c
r3708 r3712 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1.5 8$ $Name: not supported by cvs2svn $13 * @date $Date: 2005-04-19 0 0:17:05$12 * @version $Revision: 1.59 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-04-19 02:13:53 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 64 64 65 65 /** Microseconds per day */ 66 #define USEC_PER_DAY 86400000000.066 #define NSEC_PER_DAY 86400000000000.0 67 67 68 68 /** Time metadata read from config file */ … … 363 363 364 364 outTime->sec = 0; 365 outTime-> usec = 0;365 outTime->nsec = 0; 366 366 outTime->type = type; 367 outTime->leapsecond = false; 367 368 368 369 return outTime; … … 386 387 // Convert timeval time to psTime 387 388 time->sec = now.tv_sec; 388 time-> usec = now.tv_usec;389 time->nsec = now.tv_usec*1000; 389 390 390 391 // Add most leapseconds to UTC time to get TAI time if necessary … … 403 404 // Error checks 404 405 PS_PTR_CHECK_NULL(time,NULL); 405 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NULL);406 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL); 406 407 407 408 if (time->type == type) { // time already right type. That was easy! … … 448 449 // Error checks 449 450 PS_PTR_CHECK_NULL(time,NAN); 450 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NAN);451 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN); 451 452 452 453 // Calculate TAI or UTC time based on type of time user passes … … 455 456 utcTime = psTimeAlloc(PS_TIME_UTC); 456 457 utcTime->sec = taiTime->sec - psTimeGetTAIDelta(time); 457 utcTime-> usec = taiTime->usec;458 utcTime->nsec = taiTime->nsec; 458 459 } else if(time->type == PS_TIME_UTC) { 459 460 utcTime = psMemIncrRefCounter(time); 460 461 taiTime = psTimeAlloc(PS_TIME_TAI); 461 462 taiTime->sec = utcTime->sec + psTimeGetTAIDelta(time); 462 taiTime-> usec = utcTime->usec;463 taiTime->nsec = utcTime->nsec; 463 464 } 464 465 … … 519 520 // Error checks 520 521 PS_PTR_CHECK_NULL(time,NAN); 521 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NAN);522 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN); 522 523 523 524 if(time->type != PS_TIME_TAI) { … … 592 593 // Error checks 593 594 PS_PTR_CHECK_NULL(time,NULL); 594 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NULL);595 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL); 595 596 596 597 if(time->type != PS_TIME_TAI) … … 715 716 // Error checks 716 717 PS_PTR_CHECK_NULL(time,NAN); 717 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NAN);718 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN); 718 719 719 720 // Check time metadata … … 768 769 PS_PTR_CHECK_NULL(time1,0); 769 770 PS_PTR_CHECK_NULL(time2,0); 770 PS_INT_CHECK_RANGE(time1-> usec,0,1e6-1,0);771 PS_INT_CHECK_RANGE(time2-> usec,0,1e6-1,0);771 PS_INT_CHECK_RANGE(time1->nsec,0,1e9-1,0); 772 PS_INT_CHECK_RANGE(time2->nsec,0,1e9-1,0); 772 773 diff = abs((psS64)psTimeGetTAIDelta((psTime*)time1)-(psS64)psTimeGetTAIDelta((psTime*)time2)); 773 774 … … 781 782 // Error checks 782 783 PS_PTR_CHECK_NULL(time,NAN); 783 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NAN);784 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN); 784 785 785 786 // Julian date conversion 786 787 if(time->sec < 0) { 787 jd = time->sec / SEC_PER_DAY - time-> usec / USEC_PER_DAY + 2440587.5; // psTime earlier than epoch788 jd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + 2440587.5; // psTime earlier than epoch 788 789 } else { 789 jd = time->sec / SEC_PER_DAY + time-> usec / USEC_PER_DAY + 2440587.5; // psTime greater than epoch790 jd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + 2440587.5; // psTime greater than epoch 790 791 } 791 792 … … 800 801 // Error checks 801 802 PS_PTR_CHECK_NULL(time,NAN); 802 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NAN);803 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN); 803 804 804 805 // Modified Julian date conversion 805 806 if(time->sec < 0) { 806 mjd = time->sec / SEC_PER_DAY - time-> usec / USEC_PER_DAY + 40587.0; // psTime earlier than epoch807 mjd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + 40587.0; // psTime earlier than epoch 807 808 } else { 808 mjd = time->sec / SEC_PER_DAY + time-> usec / USEC_PER_DAY + 40587.0; // psTime greater than epoch809 mjd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + 40587.0; // psTime greater than epoch 809 810 } 810 811 … … 823 824 // Error checks 824 825 PS_PTR_CHECK_NULL(time,NULL); 825 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NULL);826 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL); 826 827 827 828 tempString = psAlloc(MAX_TIME_STRING_LENGTH); 828 829 timeString = psAlloc(MAX_TIME_STRING_LENGTH); 829 830 830 ms = time-> usec / 1000;831 ms = time->nsec / 1000000; 831 832 sec = time->sec; 832 833 … … 856 857 // Error checks 857 858 PS_PTR_CHECK_NULL(time,timevalTime); 858 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,timevalTime);859 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,timevalTime); 859 860 860 861 timevalTime.tv_sec = time->sec; 861 timevalTime.tv_usec = time-> usec;862 timevalTime.tv_usec = time->nsec / 1000; 862 863 863 864 return timevalTime; … … 879 880 // Error checks 880 881 PS_PTR_CHECK_NULL(time,NULL); 881 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NULL);882 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL); 882 883 883 884 seconds = time->sec%60; … … 941 942 seconds = days * SEC_PER_DAY; 942 943 if(seconds < 0.0) { 943 outTime-> usec = (seconds - (psS64)seconds) * -1000000.0; // psTime earlier than epoch944 outTime->nsec = (seconds - (psS64)seconds) * -1000000000.0; // psTime earlier than epoch 944 945 } else { 945 outTime-> usec = (seconds - (psS64)seconds) * 1000000.0; // psTime greater than epoch946 outTime->nsec = (seconds - (psS64)seconds) * 1000000000.0; // psTime greater than epoch 946 947 } 947 948 outTime->sec = seconds; 948 949 949 950 // Error check 950 PS_INT_CHECK_RANGE(outTime-> usec,0,1e6-1,outTime);951 PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime); 951 952 952 953 return outTime; … … 967 968 seconds = days * SEC_PER_DAY; 968 969 if(seconds < 0.0) { 969 outTime-> usec = (seconds - (psS64)seconds) * -1000000.0; // psTime earlier than epoch970 outTime->nsec = (seconds - (psS64)seconds) * -1000000000.0; // psTime earlier than epoch 970 971 } else { 971 outTime-> usec = (seconds - (psS64)seconds) * 1000000.0; // psTime greater than epoch972 outTime->nsec = (seconds - (psS64)seconds) * 1000000000.0; // psTime greater than epoch 972 973 } 973 974 outTime->sec = seconds; 974 975 975 976 // Error check 976 PS_INT_CHECK_RANGE(outTime-> usec,0,1e6-1,outTime);977 PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime); 977 978 978 979 return outTime; … … 1006 1007 // Convert tm time to psTime 1007 1008 outTime = psTimeFromTM(&tmTime); 1008 outTime-> usec = millisecond * 1000;1009 outTime->nsec = millisecond * 1000000; 1009 1010 1010 1011 return outTime; … … 1024 1025 // Convert to psTime 1025 1026 outTime->sec = time->tv_sec; 1026 outTime-> usec = time->tv_usec;1027 outTime->nsec = time->tv_usec * 1000; 1027 1028 1028 1029 // Error check 1029 PS_INT_CHECK_RANGE(outTime-> usec,0,1e6-1,outTime);1030 PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime); 1030 1031 1031 1032 return outTime; … … 1083 1084 1084 1085 // C's TM does not define a microsecond field. Microseconds must be manipulated by calling function. 1085 outTime-> usec = 0;1086 outTime->nsec = 0; 1086 1087 1087 1088 // Error check 1088 PS_INT_CHECK_RANGE(outTime-> usec,0,1e6-1,outTime);1089 PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime); 1089 1090 1090 1091 return outTime; … … 1100 1101 // Error checks 1101 1102 PS_PTR_CHECK_NULL(time,NULL); 1102 PS_INT_CHECK_RANGE(time-> usec,0,1e6-1,NULL);1103 PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL); 1103 1104 1104 1105 // Convert time to TAI if necessary, but without changing input arguments … … 1106 1107 tempTime = psTimeAlloc(PS_TIME_UTC); 1107 1108 tempTime->sec = time->sec; 1108 tempTime-> usec = time->usec;1109 tempTime->nsec = time->nsec; 1109 1110 tempTime = psTimeConvert(tempTime, PS_TIME_TAI); 1110 1111 } else { … … 1114 1115 // Create output time 1115 1116 outTime = psTimeAlloc(PS_TIME_TAI); 1116 sec = delta + (psF64)tempTime->sec + (psF64)tempTime-> usec/1e6;1117 sec = delta + (psF64)tempTime->sec + (psF64)tempTime->nsec/1e9; 1117 1118 outTime->sec = sec; 1118 outTime-> usec = (sec - outTime->sec)*1e6;1119 outTime->nsec = (sec - outTime->sec)*1e9; 1119 1120 1120 1121 // Error check 1121 PS_INT_CHECK_RANGE(outTime-> usec,0,1e6-1,outTime);1122 PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime); 1122 1123 1123 1124 // Convert result to same time type as input … … 1142 1143 // Error checks 1143 1144 PS_PTR_CHECK_NULL(time1,0.0); 1144 PS_INT_CHECK_RANGE(time1-> usec,0,1e6-1,0.0);1145 PS_INT_CHECK_RANGE(time1->nsec,0,1e9-1,0.0); 1145 1146 PS_PTR_CHECK_NULL(time2,0.0); 1146 PS_INT_CHECK_RANGE(time2-> usec,0,1e6-1,0.0);1147 PS_INT_CHECK_RANGE(time2->nsec,0,1e9-1,0.0); 1147 1148 1148 1149 // Convert time to TAI if necessary, but without changing input arguments … … 1150 1151 tempTime1 = psTimeAlloc(PS_TIME_UTC); 1151 1152 tempTime1->sec = time1->sec; 1152 tempTime1-> usec = time1->usec;1153 tempTime1->nsec = time1->nsec; 1153 1154 tempTime1 = psTimeConvert(tempTime1, PS_TIME_TAI); 1154 1155 } else { … … 1158 1159 tempTime2 = psTimeAlloc(PS_TIME_UTC); 1159 1160 tempTime2->sec = time2->sec; 1160 tempTime2-> usec = time2->usec;1161 tempTime2->nsec = time2->nsec; 1161 1162 tempTime2 = psTimeConvert(tempTime2, PS_TIME_TAI); 1162 1163 } else { … … 1165 1166 1166 1167 uSec1 = tempTime1->sec >= 0 ? 1.0 : -1.0; 1167 uSec1 = uSec1*tempTime1-> usec/1e6;1168 uSec1 = uSec1*tempTime1->nsec/1e9; 1168 1169 uSec2 = tempTime2->sec >= 0 ? 1.0 : -1.0; 1169 uSec2 = uSec2*tempTime2-> usec/1e6;1170 uSec2 = uSec2*tempTime2->nsec/1e9; 1170 1171 out = (tempTime1->sec-tempTime2->sec) + (uSec1-uSec2); 1171 1172
Note:
See TracChangeset
for help on using the changeset viewer.
