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_Second_hpp
10 #define anna_core_util_Second_hpp
14 #include <anna/config/defines.hpp>
15 #include <anna/core/RuntimeException.hpp>
23 * Clase para modelar la unidad temporal segundos.
34 Tamaño de la memoria reservada que debe tener la variable usada para guardar
35 el resultado de convertir el 'time' en texto.
39 static const int DateTimeSizeString = 21;
44 Second() : a_value(0) {;}
48 * \param value Valor inicial de esta instancia.
50 explicit Second(const type_t value) : a_value(value) {;}
54 * \param other Instancia de la que copiar.
56 Second(const Second& other) : a_value(other.a_value) {;}
60 * \param other Instancia de la que copiar.
62 Second(const Millisecond& other);
66 * \param other Instancia de la que copiar.
68 Second(const Microsecond& other);
71 * Conversor a numérico.
72 * \return El valor asociado a esta instancia.
74 operator type_t () const throw() { return a_value; }
79 type_t& refValue() throw() { return a_value; }
81 Second& operator= (const type_t other) throw() { a_value = other; return *this; }
83 Second& operator= (const Second& other) throw() { a_value = other.a_value; return *this; }
85 Second& operator= (const Millisecond& other) throw();
87 Second& operator= (const Microsecond& other) throw();
89 bool operator== (const Second& other) const throw() { return a_value == other.a_value; }
91 bool operator== (const Millisecond& other) const throw();
93 bool operator== (const Microsecond& other) const throw();
95 bool operator!= (const Second& other) const throw() { return a_value != other.a_value; }
97 bool operator!= (const Millisecond& other) const throw();
99 bool operator!= (const Microsecond& other) const throw();
101 bool operator> (const Second& other) const throw() { return a_value > other.a_value; }
103 bool operator> (const Millisecond& other) const throw();
105 bool operator> (const Microsecond& other) const throw();
107 bool operator< (const Second& other) const throw() { return a_value < other.a_value; }
109 bool operator< (const Millisecond& other) const throw();
111 bool operator< (const Microsecond& other) const throw();
113 bool operator>= (const Second& other) const throw() { return a_value >= other.a_value; }
115 bool operator>= (const Millisecond& other) const throw() { return (operator==(other) == true) ? true : operator>(other); }
117 bool operator>= (const Microsecond& other) const throw() { return (operator==(other) == true) ? true : operator>(other); }
119 bool operator<= (const Second& other) const throw() { return a_value <= other.a_value; }
121 bool operator<= (const Millisecond& other) const throw() { return (operator==(other) == true) ? true : operator<(other); }
123 bool operator<= (const Microsecond& other) const throw() { return (operator==(other) == true) ? true : operator<(other); }
126 * Devuelve el valor asociado a esta instancia.
127 * \return el valor asociado a esta instancia.
129 type_t getValue() const throw() { return a_value; }
132 Devuelve una cadena con la hora en formato 'dd/mm/yyyy hh:mm:ss'.
133 @param format Indicador de formato.
134 @return Un literal con la hora en el formato 'dd/mm/yyyy hh:mm:ss'.
138 std::string asDateTime(const char* format = "%d/%0m/%Y %T") const throw();
141 Devuelve una cadena con la hora en formato 'dd/mm/yyyy hh:mm:ss'.
143 @param format Indicador de formato.
144 @param result Puntero donde vamos a guardar el resultado de la conversin.
145 Debe tener espacio reservado para contener #DateTimeSizeString caracteres.
149 const char* asDateTime(char* result, const char* format = "%d/%0m/%Y %T") const throw();
152 * Devuelve una cadena con el valor de esta instancia y las unidades "sec".
153 * \return una cadena con el valor de esta instancia y las unidades "sec".
155 std::string asString() const throw();
158 * Devuelve la hora actual de sistema expresada en segundos transcurridos desde el 1 de Enero de 1970
159 * \return la hora actual de sistema expresada en segundos transcurridos desde el 1 de Enero de 1970
161 static Second getTime() throw();
164 * Devuelve la hora actual de sistema expresada en segundos transcurridos desde el 1 de Enero de 1970 aplicando
165 * las correciones correspondientes a la hora local.
166 * \return la hora actual de sistema expresada en segundos transcurridos desde el 1 de Enero de 1970
168 static Second getLocalTime() throw();
171 * Obtiene los microsegundos del valor contenido en la cadena recibida como parámetro.
172 * \param value Cadena que contiene los microsegundos habrá sido obtenida con #asString.
173 * \return los microsegundos del valor contenido en la cadena recibida como parámetro.
175 static Second fromString(const std::string& value) throw(RuntimeException);
180 friend class Millisecond;
181 friend class Microsecond;
183 friend class Second operator + (const Second& left, const Second& right) throw();
184 friend class Second operator - (const Second& left, const Second& right) throw();
185 friend class Second operator / (const Second& left, const Second& right) throw();
186 friend class Second operator / (const Second& left, const int right) throw();
187 friend class Second operator / (const Second& left, const unsigned int right) throw();
190 inline Second operator + (const Second& left, const Second& right)
192 return Second(left.a_value + right.a_value);
195 inline Second operator - (const Second& left, const Second& right)
197 return Second(left.a_value - right.a_value);
200 inline Second operator / (const Second& left, const Second& right)
202 return Second(left.a_value / right.a_value);
205 inline Second operator / (const Second& left, const int right)
207 return Second(left.a_value / right);
210 inline Second operator / (const Second& left, const unsigned int right)
212 return Second(left.a_value / right);