1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_core_util_Millisecond_hpp
10 #define anna_core_util_Millisecond_hpp
16 #include <anna/core/util/defines.hpp>
17 #include <anna/core/RuntimeException.hpp>
31 Millisecond() : a_value(0) {;}
35 * \param value Valor inicial de esta instancia.
37 explicit Millisecond(const type_t value) : a_value(value) {;}
41 * \param other Instancia de la que copiar.
43 Millisecond(const Millisecond& other) : a_value(other.a_value) {;}
47 * \param other Instancia de la que copiar.
49 Millisecond(const Second& other);
53 * \param other Instancia de la que copiar.
55 Millisecond(const Microsecond& other);
58 * Conversor a numérico.
59 * \return El valor asociado a esta instancia.
61 operator type_t () const throw() { return a_value; }
66 type_t& refValue() throw() { return a_value; }
68 Millisecond& operator= (const type_t other) throw() { a_value = other; return *this; }
70 Millisecond& operator= (const Millisecond& other) throw() { a_value = other.a_value; return *this; }
72 Millisecond& operator= (const Second& other) throw();
74 Millisecond& operator= (const Microsecond& other) throw();
76 bool operator== (const Millisecond& other) const throw() { return a_value == other.a_value; }
78 bool operator== (const Second& other) const throw();
80 bool operator== (const Microsecond& other) const throw();
82 bool operator!= (const Millisecond& other) const throw() { return a_value != other.a_value; }
84 bool operator!= (const Second& other) const throw();
86 bool operator!= (const Microsecond& other) const throw();
88 bool operator> (const Millisecond& other) const throw() { return a_value > other.a_value; }
90 bool operator> (const Second& other) const throw();
92 bool operator> (const Microsecond& other) const throw();
94 bool operator< (const Millisecond& other) const throw() { return a_value < other.a_value; }
96 bool operator< (const Second& other) const throw();
98 bool operator< (const Microsecond& other) const throw();
100 bool operator>= (const Millisecond& other) const throw() { return a_value >= other.a_value; }
102 bool operator>= (const Second& other) const throw() { return (operator==(other) == true) ? true : operator>(other); }
104 bool operator>= (const Microsecond& other) const throw() { return (operator==(other) == true) ? true : operator>(other); }
106 bool operator<= (const Millisecond& other) const throw() { return a_value <= other.a_value; }
108 bool operator<= (const Second& other) const throw() { return (operator==(other) == true) ? true : operator<(other); }
110 bool operator<= (const Microsecond& other) const throw() { return (operator==(other) == true) ? true : operator<(other); }
112 Millisecond& operator+= (const Millisecond& other) throw() { a_value += other.a_value; return *this; }
114 Millisecond& operator-= (const Millisecond& other) throw() {(a_value > other.a_value) ? (a_value -= other.a_value) : (a_value = 0); return *this; }
117 * Devuelve el valor asociado a esta instancia.
118 * \return el valor asociado a esta instancia.
120 type_t getValue() const throw() { return a_value; }
123 * Si el valor de esta instancia es positivo devuelve el valor asociado a esta instancia en una estructura de
124 * time \em timeval usada habitualmente para temporizar operaciones a nivel de SO, en otro caso retorna NULL.
125 * \param tv Instancia sobre la que guardar el valor en caso de que se éste tenga un valor positivo.
126 * \return Si el valor de esta instancia es positivo devuelve el valor asociado a esta instancia en una estructura de
127 * time \em timeval usada habitualmente para temporizar operaciones a nivel de SO, en otro caso retorna NULL.
129 timeval* getTimeVal(timeval& tv) const throw();
132 * Devuelve la hora actual de sistema expresada en milisegundos transcurridos desde el 1 de Enero de 1970
133 * \return la hora actual de sistema expresada en milisegundos transcurridos desde el 1 de Enero de 1970
135 static Millisecond getTime() throw();
138 * Devuelve una cadena con el valor de esta instancia y las unidades "ms".
139 * \return una cadena con el valor de esta instancia y las unidades "ms".
141 std::string asString() const throw();
144 * Obtiene los microsegundos del valor contenido en la cadena recibida como parámetro.
145 * \param value Cadena que contiene los microsegundos habrá sido obtenida con #asString.
146 * \return los microsegundos del valor contenido en la cadena recibida como parámetro.
148 static Millisecond fromString(const std::string& value) throw(RuntimeException);
154 friend class Microsecond;
156 friend class Millisecond operator / (const Millisecond& left, const Millisecond& right) throw();
157 friend class Millisecond operator + (const Millisecond& left, const Millisecond& right) throw();
158 friend class Millisecond operator - (const Millisecond& left, const Millisecond& right) throw();
159 friend class Millisecond operator / (const Millisecond& left, const int right) throw();
160 friend class Millisecond operator / (const Millisecond& left, const unsigned int right) throw();
161 friend class Millisecond operator *(const Millisecond& left, const int right) throw();
164 inline Millisecond operator / (const Millisecond& left, const Millisecond& right)
166 return Millisecond(left.a_value / right.a_value);
169 inline Millisecond operator + (const Millisecond& left, const Millisecond& right)
171 return Millisecond(left.a_value + right.a_value);
174 inline Millisecond operator - (const Millisecond& left, const Millisecond& right)
176 return Millisecond(left.a_value - right.a_value);
179 inline Millisecond operator / (const Millisecond& left, const int right)
181 return Millisecond(left.a_value / right);
184 inline Millisecond operator / (const Millisecond& left, const unsigned int right)
186 return Millisecond(left.a_value / right);
189 inline Millisecond operator *(const Millisecond& left, const int right)
191 return Millisecond(left.a_value * right);