Changeset 2179 for trunk/psLib/src/astro/psTime.c
- Timestamp:
- Oct 20, 2004, 10:05:58 AM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/astro/psTime.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astro/psTime.c
r2151 r2179 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.3 4$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-10- 15 19:10:50$13 * @version $Revision: 1.35 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2004-10-20 20:05:51 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 482 482 483 483 return out; 484 } 485 486 psTime* psTimeAlloc(psTimeType type) 487 { 488 psTime *outTime = NULL; 489 490 if(type!=PS_TIME_TAI && type!=PS_TIME_UTC) { 491 psError(__func__, " : Line %d - Incorrect type. Type: %d", __LINE__, type); 492 return NULL; 493 } 494 495 outTime = (psTime*)psAlloc(sizeof(psTime)); 496 if(outTime == NULL) { 497 psAbort(__func__, " : Line %d - Failed to allocate memory", __LINE__); 498 } 499 500 outTime->sec = 0; 501 outTime->usec = 0; 502 outTime->type = type; 503 504 return outTime; 484 505 } 485 506 … … 1004 1025 psTime* psTimeAdd(const psTime *tai1, const psTime *tai2) 1005 1026 { 1027 psF64 deltaSec = 0; 1006 1028 long deltaUsec = 0; 1007 1029 psTime *outTime = NULL; … … 1010 1032 if(tai1->type != tai2->type) { 1011 1033 psError(__func__, " : Line %d - Argument types inconsistent for time addition", __LINE__); 1034 return NULL; 1035 } else if(tai1->usec >= 1e6) { 1036 psError(__func__, " : Line %d - Argument 1 microseconds too big. Value %u", __LINE__, tai1->usec); 1037 return NULL; 1038 } else if(tai2->usec >= 1e6) { 1039 psError(__func__, " : Line %d - Argument 2 microseconds too big. Value %u", __LINE__, tai2->usec); 1012 1040 return NULL; 1013 1041 } … … 1018 1046 deltaUsec = tai1->usec + tai2->usec; 1019 1047 1020 // Adjust time in case of microsecond overflow after subtraction 1021 if(deltaUsec > 1e6) { 1022 outTime->sec++; 1023 outTime->usec = 2e6 - deltaUsec; 1048 // Adjust time in case of microsecond overflow after addition 1049 if(deltaUsec >= 1e6) { 1050 if(deltaSec < 0 ) { 1051 outTime->sec--; // Negative seconds - make more negative 1052 } else { 1053 outTime->sec++; // Positive seconds - make more positive 1054 } 1055 outTime->usec = deltaUsec - 1e6; 1024 1056 } else { 1025 1057 outTime->usec = deltaUsec; … … 1031 1063 psTime* psTimeSubtract(const psTime *tai1, const psTime *tai2) 1032 1064 { 1065 psS64 deltaSec = 0; 1033 1066 long deltaUsec = 0; 1034 1067 psTime *outTime = NULL; … … 1038 1071 psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__); 1039 1072 return NULL; 1073 } else if(tai1->usec >= 1e6) { 1074 psError(__func__, " : Line %d - Argument 1 microseconds too big. Value %u", __LINE__, tai1->usec); 1075 return NULL; 1076 } else if(tai2->usec >= 1e6) { 1077 psError(__func__, " : Line %d - Argument 2 microseconds too big. Value %u", __LINE__, tai2->usec); 1078 return NULL; 1040 1079 } 1041 1080 1042 1081 ALLOC_TIME(outTime); 1043 1082 outTime->type = tai1->type; 1044 outTime->sec = tai1->sec - tai2->sec;1083 deltaSec = tai1->sec - tai2->sec; 1045 1084 deltaUsec = (long)tai1->usec - (long)tai2->usec; 1046 1085 1047 1086 // Adjust time in case of microsecond underflow after subtraction 1048 1087 if(deltaUsec < 0) { 1049 outTime->sec--; 1088 if(deltaSec < 0) { 1089 deltaSec++; // Negative seconds - make less negative 1090 } else { 1091 deltaSec--; // Positive seconds - make less positive 1092 } 1050 1093 outTime->usec = 1e6+deltaUsec; 1051 1094 } else { … … 1053 1096 } 1054 1097 1098 outTime->sec = deltaSec; 1099 1055 1100 return outTime; 1056 1101 } … … 1058 1103 psTime* psTimeDelta(const psTime *tai1, const psTime *tai2) 1059 1104 { 1105 psS64 deltaSec = 0; 1060 1106 long deltaUsec = 0; 1061 1107 psTime *outTime = NULL; … … 1065 1111 psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__); 1066 1112 return NULL; 1113 } else if(tai1->usec >= 1e6) { 1114 psError(__func__, " : Line %d - Argument 1 microseconds too big. Value %u", __LINE__, tai1->usec); 1115 return NULL; 1116 } else if(tai2->usec >= 1e6) { 1117 psError(__func__, " : Line %d - Argument 2 microseconds too big. Value %u", __LINE__, tai2->usec); 1118 return NULL; 1067 1119 } 1068 1120 1069 1121 ALLOC_TIME(outTime); 1070 1122 outTime->type = tai1->type; 1071 outTime->sec = tai1->sec - tai2->sec;1072 deltaUsec = tai1->usec -tai2->usec;1123 deltaSec = tai1->sec - tai2->sec; 1124 deltaUsec = (long)tai1->usec - (long)tai2->usec; 1073 1125 1074 1126 // Adjust time in case of microsecond underflow after subtraction 1075 1127 if(deltaUsec < 0) { 1076 outTime->sec--; 1128 if(deltaSec < 0) { 1129 deltaSec++; // Negative seconds - make less negative 1130 } else { 1131 deltaSec--; // Positive seconds - make less positive 1132 } 1077 1133 outTime->usec = 1e6+deltaUsec; 1078 1134 } else { … … 1080 1136 } 1081 1137 1082 outTime->sec = abs( outTime->sec);1138 outTime->sec = abs(deltaSec); 1083 1139 1084 1140 return outTime;
Note:
See TracChangeset
for help on using the changeset viewer.
