f11b05067cf8a831942b450e4144a83f06984081
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #include <errno.h>
7) #include <stdint.h>
8) #include <sys/time.h>
9) #include <time.h>
10) 
11) #include "Time.h"
12) 
13) namespace Blinker {
14) 
15) const Time Time::zero(0); ///< zero time
16) 
17) /**
18)  * @brief get current time
19)  * @return current time
20)  */
21) Time Time::now()
22) {
23)   Time now;
24) 
25)   struct timeval tv;
26)   gettimeofday(&tv, NULL);
27)   now.m_sec = tv.tv_sec;
28)   now.m_ns = tv.tv_usec * 1000;
29) 
30)   return now;
31) }
32) 
33) /// constructor
34) Time::Time():
35)   m_sec(0),
36)   m_ns(0)
37) {
38) }
39) 
40) /**
41)  * @brief constructor from seconds
42)  * @param[in] t time in seconds
43)  */
44) Time::Time(time_t t):
45)   m_sec(t),
46)   m_ns(0)
47) {
48) }
49) 
50) /// comparison
51) //@{
52) 
53) int Time::compare(const Time &that) const
54) {
55)   if (m_sec < that.m_sec)
56)     return -1;
57)   if (m_sec > that.m_sec)
58)     return 1;
59)   if (m_ns < that.m_ns)
60)     return -1;
61)   if (m_ns > that.m_ns)
62)     return 1;
63)   return 0;
64) }
65) 
66) bool Time::operator==(const Time &that) const
67) {
68)   return compare(that) == 0;
69) }
70) 
71) bool Time::operator!=(const Time &that) const
72) {
73)   return compare(that) != 0;
74) }
75) 
76) bool Time::operator<(const Time &that) const
77) {
78)   return compare(that) < 0;
79) }
80) 
81) bool Time::operator>(const Time &that) const
82) {
83)   return compare(that) > 0;
84) }
85) 
86) bool Time::operator<=(const Time &that) const
87) {
88)   return compare(that) <= 0;
89) }
90) 
91) bool Time::operator>=(const Time &that) const
92) {
93)   return compare(that) >= 0;
94) }
95) 
96) //@}
97) 
98) /// arithmetic
99) //@{
100) 
101) const Time & Time::operator+=(const Time &that)
102) {
103)   m_sec += that.m_sec;
104)   m_ns += that.m_ns;
105)   fix();
106)   return *this;
107) }
108) 
109) const Time & Time::operator-=(const Time &that)
110) {
111)   m_sec -= that.m_sec;
112)   m_ns -= that.m_ns;
113)   fix();
114)   return *this;
115) }
116) 
117) Time Time::operator+(const Time &that) const
118) {
119)   Time result(*this);
120)   result += that;
121)   return result;
122) }
123) 
124) Time Time::operator-(const Time &that) const
125) {
126)   Time result(*this);
127)   result -= that;
128)   return result;
129) }
130) 
131) //@}
132) 
133) /**
134)  * @brief convert from milliseconds
135)  * @param[in] ms milliseconds
136)  */
137) void Time::fromMs(int ms)
138) {
139)   if (ms >= 0) {
140)     m_sec = ms / 1000;
141)     m_ns = (ms % 1000) * 1000000;
142)   } else {
143)     m_sec = -(-ms / 1000);
144)     m_ns = -(-ms % 1000) * 1000000;
145)   }
146) }
147) 
148) /**
149)  * @brief convert to seconds
150)  * @return seconds
151)  */
152) time_t Time::toSec() const
153) {
154)   if (m_ns >= 500000000)
155)     return m_sec + 1;
156)   else if (m_ns <= 500000000)
157)     return m_sec - 1;
158)   else
159)     return m_sec;
160) }
161) 
Stefan Schuermans implemented base class for...

Stefan Schuermans authored 13 years ago

162) /**
163)  * @brief convert to struct timeval
164)  * @param[out] tv struct timeval
165)  */
166) void Time::toTimeval(struct timeval &tv) const
167) {
168)   if (m_sec >= 0) {
169)     tv.tv_sec = m_sec;
170)     tv.tv_usec = (m_ns + 500) / 1000;
171)     if (tv.tv_usec >= 1000000) {
172)       ++tv.tv_sec;
173)       tv.tv_usec -= 1000000;
174)     }
175)   } else {
176)     tv.tv_sec = m_sec;
177)     tv.tv_usec = -((-m_ns + 500) / 1000);
178)     if (tv.tv_usec <= -1000000) {
179)       --tv.tv_sec;
180)       tv.tv_usec += 1000000;
181)     }
182)   }
183) }
184)