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_String_hpp
10 #define anna_core_util_String_hpp
16 #include <anna/core/util/defines.hpp>
23 * Clase String que optimiza el uso y la conversi�n de tipos usados habitualmente.
25 class String : public std::string {
28 * Indicadores que permiten ajustar el funcionamiento de la clase anna::String.
32 struct Flag { enum _v { None, ShowNull }; };
36 * \param flag Indicadores que permiten ajustar el funcionamiento de la clase anna::String.
38 String(const Flag::_v flag = Flag::None) : a_flags(flag) {;}
42 * \param str Cadena con la que iniciar el contenido de esta instancia. Puede ser NULL.
43 * \param flag Indicadores que permiten ajustar el funcionamiento de la clase anna::String.
45 explicit String(const char* str, const Flag::_v flag = Flag::None) :
46 std::string((str == NULL) ? ((flag & Flag::ShowNull) ? "<null>" : "") : str),
52 * \param other Instancia con la iniciar el contenido de esta instancia.
54 String(const String &other) : std::string(other), a_flags(other.a_flags) {;}
59 * \param other Instancia con la iniciar el contenido de esta instancia.
60 * \param flag Indicadores que permiten ajustar el funcionamiento de la clase anna::String.
62 explicit String(const std::string& other, const Flag::_v flag = Flag::None) : std::string(other), a_flags(flag) {;}
65 * Convierte a may�sculas el contenido de esta instancia.
67 void toUpper() throw();
70 * Convierte a min�sculas el contenido de esta instancia.
72 void toLower() throw();
74 String& operator = (const char* vv) throw() { std::string::clear(); return operator<< (vv); }
75 String& operator = (const int vv) throw() { std::string::clear(); return operator<< (vv); }
76 String& operator = (const unsigned int vv) throw() { std::string::clear(); return operator<< (vv); }
77 String& operator = (const bool vv) throw() { std::string::clear(); return operator<< (vv); }
78 String& operator = (const S64 vv) throw() { std::string::clear(); return operator<< (vv); }
79 String& operator = (const U64 vv) throw() { std::string::clear(); return operator<< (vv); }
80 String& operator = (const float vv) throw() { std::string::clear(); return operator<< (vv); }
81 String& operator = (const double vv) throw() { std::string::clear(); return operator<< (vv); }
82 String& operator = (const std::string& vv) throw() { std::string::operator= (vv); return *this; }
83 String& operator = (const DataBlock& vv) throw() { std::string::clear(); return operator<< (vv); }
85 String& operator += (const char* vv) throw() { return operator<< (vv); }
86 String& operator += (const int vv) throw() { return operator<< (vv); }
87 String& operator += (const unsigned int vv) throw() { return operator<< (vv); }
88 String& operator += (const bool vv) throw() { return operator<< (vv); }
89 String& operator += (const S64 vv) throw() { return operator<< (vv); }
90 String& operator += (const U64 vv) throw() { return operator<< (vv); }
91 String& operator += (const float vv) throw() { return operator<< (vv); }
92 String& operator += (const double vv) throw() { return operator<< (vv); }
93 String& operator += (const std::string& vv) throw() { return *this << vv; }
94 String& operator += (const DataBlock& vv) throw() { return *this << vv; }
96 String& operator << (const char* vv) throw();
97 String& operator << (const int vv) throw();
98 String& operator << (const unsigned int vv) throw();
99 String& operator << (const bool vv) throw() { std::string::operator+= ((vv == true) ? "true" : "false"); return *this; }
100 String& operator << (const S64 vv) throw();
101 String& operator << (const U64 vv) throw();
102 String& operator << (const float vv) throw();
103 String& operator << (const double vv) throw();
104 String& operator << (const std::string& vv) throw() { std::string::operator+= (vv); return *this; }
105 String& operator << (const DataBlock& vv) throw();
108 * Formatea el contenido del \em float con la cadena recibida como par�metro.
109 * La cadena de forma se interpreta de la misma forma que en el m�todo \em 'sprintf'
110 * \param vv Valor a interpretar.
111 * \param format Cadena usada para interpretar el valor (ver sprintf).
112 * \return La cadena con el contenido interpretado.
114 static String format(const float vv, const char* format) throw() { return __format(vv, format); }
117 * Formatea el contenido del \em double con la cadena recibida como par�metro.
118 * La cadena de forma se interpreta de la misma forma que en el m�todo \em 'sprintf'
119 * \param vv Valor a interpretar.
120 * \param format Cadena usada para interpretar el valor (ver sprintf).
121 * \return La cadena con el contenido interpretado.
123 static String format(const double vv, const char* format) throw() { return __format(vv, format); }
126 * Formatea el contenido del DataBlock con el n�mero de caracteres por l�nea recibida como par�metro.
127 * \param vv Valor a interpretar.
128 * \param characterByLine N�mero de caracters por l�nea.
129 * \return La cadena con el contenido interpretado.
131 static String format(const DataBlock& vv, const int characterByLine) throw();
134 * Formatea el valor del par�metro como un n�mero en hexadecimal.
135 * \param vv Valor a interpretar.
136 * \return La cadena con el contenido interpretado.
138 static String hex(const int vv) { return __format(vv, "0x%x"); }
141 * Formatea el valor del par�metro como un n�mero en hexadecimal.
142 * \param vv Valor a interpretar.
143 * \return La cadena con el contenido interpretado.
145 static String hex(const unsigned int vv) { return __format(vv, "0x%x"); }
148 * Formatea el valor del par�metro como un n�mero en hexadecimal.
149 * \param vv Valor a interpretar.
150 * \return La cadena con el contenido interpretado.
152 static String hex(const S64 vv) {
153 return __format(vv, "0x%llx");
155 return __format (vv, "0x%lx");
157 return __format (vv, "0x%llx");
165 template <typename T> static String __format(const T vv, const char* format) {
167 sprintf(aux, format, vv);