IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 2179


Ignore:
Timestamp:
Oct 20, 2004, 10:05:58 AM (22 years ago)
Author:
harman
Message:

Updated add, subtract, and delta.
Added psTimeAlloc

Location:
trunk/psLib/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astro/psTime.c

    r2151 r2179  
    1111 *  @author Ross Harman, MHPCC
    1212 *
    13  *  @version $Revision: 1.34 $ $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 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    482482
    483483    return out;
     484}
     485
     486psTime* 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;
    484505}
    485506
     
    10041025psTime* psTimeAdd(const psTime *tai1, const psTime *tai2)
    10051026{
     1027    psF64 deltaSec = 0;
    10061028    long deltaUsec = 0;
    10071029    psTime *outTime = NULL;
     
    10101032    if(tai1->type != tai2->type) {
    10111033        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);
    10121040        return NULL;
    10131041    }
     
    10181046    deltaUsec = tai1->usec + tai2->usec;
    10191047
    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;
    10241056    } else {
    10251057        outTime->usec = deltaUsec;
     
    10311063psTime* psTimeSubtract(const psTime *tai1, const psTime *tai2)
    10321064{
     1065    psS64 deltaSec = 0;
    10331066    long deltaUsec = 0;
    10341067    psTime *outTime = NULL;
     
    10381071        psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__);
    10391072        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;
    10401079    }
    10411080
    10421081    ALLOC_TIME(outTime);
    10431082    outTime->type = tai1->type;
    1044     outTime->sec = tai1->sec - tai2->sec;
     1083    deltaSec = tai1->sec - tai2->sec;
    10451084    deltaUsec = (long)tai1->usec - (long)tai2->usec;
    10461085
    10471086    // Adjust time in case of microsecond underflow after subtraction
    10481087    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        }
    10501093        outTime->usec = 1e6+deltaUsec;
    10511094    } else {
     
    10531096    }
    10541097
     1098    outTime->sec = deltaSec;
     1099
    10551100    return outTime;
    10561101}
     
    10581103psTime* psTimeDelta(const psTime *tai1, const psTime *tai2)
    10591104{
     1105    psS64 deltaSec = 0;
    10601106    long deltaUsec = 0;
    10611107    psTime *outTime = NULL;
     
    10651111        psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__);
    10661112        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;
    10671119    }
    10681120
    10691121    ALLOC_TIME(outTime);
    10701122    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;
    10731125
    10741126    // Adjust time in case of microsecond underflow after subtraction
    10751127    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        }
    10771133        outTime->usec = 1e6+deltaUsec;
    10781134    } else {
     
    10801136    }
    10811137
    1082     outTime->sec = abs(outTime->sec);
     1138    outTime->sec = abs(deltaSec);
    10831139
    10841140    return outTime;
  • trunk/psLib/src/astro/psTime.h

    r2048 r2179  
    5454 *  @author Ross Harman, MHPCC
    5555 *
    56  *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
    57  *  @date $Date: 2004-10-12 01:34:09 $
     56 *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
     57 *  @date $Date: 2004-10-20 20:05:58 $
    5858 *
    5959 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    100100psTime;
    101101
     102/** Allocate time struct.
     103 *
     104 * Allocates an empty time struct. User must specify the psTimeType (PS_TIME_TAI or PS_TIME_UTC) in the argument.
     105 * The seconds and microseconds members of the struct are set to zero.
     106 *
     107 * @return  psTime*: Struct with empty time.
     108 */
     109psTime* psTimeAlloc(
     110    psTimeType type                     ///< Type of time to create (UTC or TAI).
     111);
     112
    102113/** Get current time.
    103114 *
  • trunk/psLib/src/astronomy/psTime.c

    r2151 r2179  
    1111 *  @author Ross Harman, MHPCC
    1212 *
    13  *  @version $Revision: 1.34 $ $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 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    482482
    483483    return out;
     484}
     485
     486psTime* 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;
    484505}
    485506
     
    10041025psTime* psTimeAdd(const psTime *tai1, const psTime *tai2)
    10051026{
     1027    psF64 deltaSec = 0;
    10061028    long deltaUsec = 0;
    10071029    psTime *outTime = NULL;
     
    10101032    if(tai1->type != tai2->type) {
    10111033        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);
    10121040        return NULL;
    10131041    }
     
    10181046    deltaUsec = tai1->usec + tai2->usec;
    10191047
    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;
    10241056    } else {
    10251057        outTime->usec = deltaUsec;
     
    10311063psTime* psTimeSubtract(const psTime *tai1, const psTime *tai2)
    10321064{
     1065    psS64 deltaSec = 0;
    10331066    long deltaUsec = 0;
    10341067    psTime *outTime = NULL;
     
    10381071        psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__);
    10391072        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;
    10401079    }
    10411080
    10421081    ALLOC_TIME(outTime);
    10431082    outTime->type = tai1->type;
    1044     outTime->sec = tai1->sec - tai2->sec;
     1083    deltaSec = tai1->sec - tai2->sec;
    10451084    deltaUsec = (long)tai1->usec - (long)tai2->usec;
    10461085
    10471086    // Adjust time in case of microsecond underflow after subtraction
    10481087    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        }
    10501093        outTime->usec = 1e6+deltaUsec;
    10511094    } else {
     
    10531096    }
    10541097
     1098    outTime->sec = deltaSec;
     1099
    10551100    return outTime;
    10561101}
     
    10581103psTime* psTimeDelta(const psTime *tai1, const psTime *tai2)
    10591104{
     1105    psS64 deltaSec = 0;
    10601106    long deltaUsec = 0;
    10611107    psTime *outTime = NULL;
     
    10651111        psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__);
    10661112        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;
    10671119    }
    10681120
    10691121    ALLOC_TIME(outTime);
    10701122    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;
    10731125
    10741126    // Adjust time in case of microsecond underflow after subtraction
    10751127    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        }
    10771133        outTime->usec = 1e6+deltaUsec;
    10781134    } else {
     
    10801136    }
    10811137
    1082     outTime->sec = abs(outTime->sec);
     1138    outTime->sec = abs(deltaSec);
    10831139
    10841140    return outTime;
  • trunk/psLib/src/astronomy/psTime.h

    r2048 r2179  
    5454 *  @author Ross Harman, MHPCC
    5555 *
    56  *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
    57  *  @date $Date: 2004-10-12 01:34:09 $
     56 *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
     57 *  @date $Date: 2004-10-20 20:05:58 $
    5858 *
    5959 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    100100psTime;
    101101
     102/** Allocate time struct.
     103 *
     104 * Allocates an empty time struct. User must specify the psTimeType (PS_TIME_TAI or PS_TIME_UTC) in the argument.
     105 * The seconds and microseconds members of the struct are set to zero.
     106 *
     107 * @return  psTime*: Struct with empty time.
     108 */
     109psTime* psTimeAlloc(
     110    psTimeType type                     ///< Type of time to create (UTC or TAI).
     111);
     112
    102113/** Get current time.
    103114 *
Note: See TracChangeset for help on using the changeset viewer.