first version, plays videos...
Stefan Schuermans authored 13 years ago
|
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)
|
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)
|