Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <math.h>
00019 #include "ros/duration.h"
00020
00021 namespace ros
00022 {
00023 void normalizeSecNSecSigned(int32_t &sec, int32_t &nsec)
00024 {
00025 int32_t nsec_part = nsec;
00026 int32_t sec_part = sec;
00027
00028 while (nsec_part > 1000000000L)
00029 {
00030 nsec_part -= 1000000000L;
00031 ++sec_part;
00032 }
00033 while (nsec_part < 0)
00034 {
00035 nsec_part += 1000000000L;
00036 --sec_part;
00037 }
00038 sec = sec_part;
00039 nsec = nsec_part;
00040 }
00041
00042 Duration& Duration::operator+=(const Duration &rhs)
00043 {
00044 sec += rhs.sec;
00045 nsec += rhs.nsec;
00046 normalizeSecNSecSigned(sec, nsec);
00047 return *this;
00048 }
00049
00050 Duration& Duration::operator-=(const Duration &rhs){
00051 sec += -rhs.sec;
00052 nsec += -rhs.nsec;
00053 normalizeSecNSecSigned(sec, nsec);
00054 return *this;
00055 }
00056
00057 Duration& Duration::operator*=(double scale){
00058 sec *= scale;
00059 nsec *= scale;
00060 normalizeSecNSecSigned(sec, nsec);
00061 return *this;
00062 }
00063
00064 }