Fast RTPS  Version 2.4.1
Fast RTPS
TimeConversion.h
1 // Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
20 #ifndef TIMECONVERSION_H_
21 #define TIMECONVERSION_H_
22 
23 #include <cstdint>
24 #include <fastdds/rtps/common/Time_t.h>
25 
26 namespace eprosima {
27 namespace fastrtps{
28 namespace rtps {
29 
30 
31 namespace TimeConv{
32 
36 inline double Time_t2SecondsDouble(const rtps::Time_t& t)
37 {
38  return (double)t.seconds() + (double)(t.fraction()/pow(2.0,32));
39 }
40 
44 inline int64_t Time_t2MicroSecondsInt64(const rtps::Time_t& t)
45 {
46  return (int64_t)(t.fraction()/pow(2.0,32)*pow(10.0,6)) + t.seconds()*(int64_t)pow(10.0,6);
47 }
48 
52 inline int64_t Duration_t2MicroSecondsInt64(const Duration_t& t)
53 {
54  return (int64_t)(t.nanosec/1000.0)+t.seconds*(int64_t)pow(10.0,6);
55 }
56 
60 inline double Time_t2MicroSecondsDouble(const rtps::Time_t& t)
61 {
62  return ((double)t.fraction()/pow(2.0,32)*pow(10.0,6)) + (double)t.seconds()*pow(10.0,6);
63 }
64 
68 inline int64_t Time_t2MilliSecondsInt64(const rtps::Time_t& t)
69 {
70  return (int64_t)(t.fraction()/pow(2.0,32)*pow(10.0,3)) + t.seconds()*(int64_t)pow(10.0,3);
71 }
72 
76 inline double Time_t2MilliSecondsDouble(const rtps::Time_t& t)
77 {
78  return ((double)t.fraction()/pow(2.0,32)*pow(10.0,3)) + (double)t.seconds()*pow(10.0,3);
79 }
80 
84 inline double Duration_t2MilliSecondsDouble(const Duration_t& t)
85 {
86  return ((double)t.nanosec/1000000.0)+(double)t.seconds*pow(10.0,3);
87 }
88 
92 inline rtps::Time_t MilliSeconds2Time_t(double millisec)
93 {
94  rtps::Time_t t;
95  t.seconds((int32_t)(millisec/pow(10.0,3)));
96  t.fraction((uint32_t)((millisec-(double)t.seconds()*pow(10.0,3))/pow(10.0,3)*pow(2.0,32)));
97  return t;
98 }
99 
103 inline rtps::Time_t MicroSeconds2Time_t(double microsec)
104 {
105  rtps::Time_t t;
106  t.seconds((int32_t)(microsec/pow(10.0,6)));
107  t.fraction((uint32_t)((microsec-(double)t.seconds()*pow(10.0,6))/pow(10.0,6)*pow(2.0,32)));
108  return t;
109 }
110 
114 inline rtps::Time_t Seconds2Time_t(double seconds)
115 {
116  rtps::Time_t t;
117  t.seconds((int32_t)seconds);
118  t.fraction((uint32_t)((seconds-(double)t.seconds())*pow(2.0,32)));
119  return t;
120 }
121 
125 inline double Time_tAbsDiff2DoubleMillisec(const rtps::Time_t& t1, const rtps::Time_t& t2)
126 {
127  double result = 0;
128  result +=(double)abs((t2.seconds()-t1.seconds())*1000);
129  result +=(double)std::abs((t2.fraction()-t1.fraction())/pow(2.0,32)*1000);
130  return result;
131 }
132 
134 inline rtps::Time_t MilliSecondsWithRandOffset2Time_t(double millisec, double randoff)
135 {
136  randoff = std::abs(randoff);
137  millisec = millisec + (-randoff) + static_cast <double> (rand()) /( static_cast <double> (RAND_MAX/(2*randoff)));
138  return MilliSeconds2Time_t(millisec);
139 }
141 inline rtps::Time_t MicroSecondsWithRandOffset2Time_t(double microsec, double randoff)
142 {
143  randoff = std::abs(randoff);
144  microsec = microsec + (-randoff) + static_cast <double> (rand()) /( static_cast <double> (RAND_MAX/(2*randoff)));
145  return MicroSeconds2Time_t(microsec);
146 }
148 inline rtps::Time_t SecondsWithRandOffset2Time_t(double sec, double randoff)
149 {
150  randoff = std::abs(randoff);
151  sec = sec + (-randoff) + static_cast <double> (rand()) /( static_cast <double> (RAND_MAX/(2*randoff)));
152  return Seconds2Time_t(sec);
153 }
154 
155 }
156 }
157 } /* namespace rtps */
158 } /* namespace eprosima */
159 
160 #endif /* TIMECONVERSION_H_ */
double Time_tAbsDiff2DoubleMillisec(const rtps::Time_t &t1, const rtps::Time_t &t2)
Get the absolute difference between two Time_t in milliseconds as double.
Definition: TimeConversion.h:125
double Time_t2MilliSecondsDouble(const rtps::Time_t &t)
Convert Time_t to milliseconds as a double.
Definition: TimeConversion.h:76
double Time_t2SecondsDouble(const rtps::Time_t &t)
Convert Time_t to seconds as a double.
Definition: TimeConversion.h:36
int64_t Duration_t2MicroSecondsInt64(const Duration_t &t)
Convert Duration_t to seconds as an int64.
Definition: TimeConversion.h:52
rtps::Time_t MicroSeconds2Time_t(double microsec)
Convert microseconds to Time_t.
Definition: TimeConversion.h:103
double Time_t2MicroSecondsDouble(const rtps::Time_t &t)
Convert Time_t to microseconds as a double.
Definition: TimeConversion.h:60
rtps::Time_t SecondsWithRandOffset2Time_t(double sec, double randoff)
Create a random Time_t that is sec + [-randoff,randoff].
Definition: TimeConversion.h:148
rtps::Time_t MicroSecondsWithRandOffset2Time_t(double microsec, double randoff)
Create a random Time_t that is microsec + [-randoff,randoff].
Definition: TimeConversion.h:141
int64_t Time_t2MilliSecondsInt64(const rtps::Time_t &t)
Convert Time_t to milliseconds as an int64.
Definition: TimeConversion.h:68
int64_t Time_t2MicroSecondsInt64(const rtps::Time_t &t)
Convert Time_t to seconds as an int64.
Definition: TimeConversion.h:44
rtps::Time_t Seconds2Time_t(double seconds)
Convert seconds to Time_t.
Definition: TimeConversion.h:114
rtps::Time_t MilliSeconds2Time_t(double millisec)
Convert milliseconds to Time_t.
Definition: TimeConversion.h:92
double Duration_t2MilliSecondsDouble(const Duration_t &t)
Convert Duration_t to milliseconds as a double.
Definition: TimeConversion.h:84
rtps::Time_t MilliSecondsWithRandOffset2Time_t(double millisec, double randoff)
Create a random Time_t that is millisec + [-randoff,randoff].
Definition: TimeConversion.h:134
eProsima namespace.
Definition: LibrarySettingsAttributes.h:23