1 // ANNA - Anna is Not Nothingness Anymore
3 // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
5 // http://redmine.teslayout.com/projects/anna-suite
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions
11 // * Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 // * Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following disclaimer
15 // in the documentation and/or other materials provided with the
17 // * Neither the name of the copyright holder nor the names of its
18 // contributors may be used to endorse or promote products derived from
19 // this software without specific prior written permission.
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 // Authors: eduardo.ramos.testillano@gmail.com
34 // cisco.tierra@gmail.com
37 #ifndef anna_core_util_Tokenizer_hpp
38 #define anna_core_util_Tokenizer_hpp
42 #include <anna/core//DataBlock.hpp>
46 class RuntimeException;
49 Separa la cadena recibida en distintos elementos.
53 typedef char* const* const_iterator;
63 @param str Cadena sobre la que aplicar la separacion.
64 @param separator Caracteres que van a actuar como separador de las subcadenas contenidas en el
67 Tokenizer(const char* str, const char* separator);
72 @param str Cadena sobre la que aplicar la separacion.
73 @param separator Caracteres que van a actuar como separador de las subcadenas contenidas en el
76 Tokenizer(const std::string& str, const char* separator);
85 Devuelve el estado del indicador de activacion de eliminacion de espacios de los extremos.
86 \return El estado del indicador de activacion de eliminacion de espacios de los extremos.
88 bool activateStrip() const throw() { return a_activateStrip; }
93 Activa y/o desactiva que activa el sistema que permite recoger los elementos retornadodos
94 por esta clase sin espacios por delante y por detras.
95 \param _activateStrip Parametro que indica el estado de activacion o desactivacion.
97 void activateStrip(const bool _activateStrip) throw() { a_activateStrip = _activateStrip; }
100 @return El elemento que ocupa la posicion i-esima.
101 \warning Este método tiene una eficiencia de O(1), mejor usar iteradores.
103 const char* at(const int i) throw(RuntimeException);
106 @return El elemento que ocupa la posicion i-esima.
107 \warning Este método tiene una eficiencia de O(1), mejor usar iteradores.
109 const char* at(const int i) const throw(RuntimeException);
112 @return El elemento que ocupa la posicion i-esima.
113 \warning Este método tiene una eficiencia de O(1), mejor usar iteradores.
115 const char* operator [](const int i) throw(RuntimeException) { return at(i); }
118 @return El elemento que ocupa la posicion i-esima.
119 \warning Este método tiene una eficiencia de O(1), mejor usar iteradores.
121 const char* operator [](const int i) const throw(RuntimeException) { return at(i); }
124 Aplica la separacion sobre la cadena str con el separador recibido como parametro.
126 @param str Cadena sobre la que aplicar la separacion.
127 @param separator Caracteres que van a actuar como separador de las subcadenas contenidas en el
130 @return Numero de elementos obtenidos al aplicar la separacion.
133 int apply(const std::string& str, const char* separator) throw(RuntimeException) {
134 return apply(str.c_str(), separator);
138 Aplica la separacion sobre la cadena str con el separador recibido como parametro.
140 @param str Cadena sobre la que aplicar la separacion.
141 @param separator Caracteres que van a actuar como separador de las subcadenas contenidas en el
144 @return Numero de elementos obtenidos al aplicar la separacion.
147 int apply(const char* str, const char* separator) throw(RuntimeException);
151 @return El ultimo elemento obtenido la aplicar la separacion.
153 const char* last() const throw(RuntimeException);
156 * Devuelve el número de elementos obtenidos en la separación.
157 * \return el número de elementos obtenidos en la separación.
159 int size() const throw() { return a_maxItem; }
162 * Devuelve el iterador el comiento de los elementos obtenidos por #apply
163 * \return el iterador el comiento de los elementos obtenidos por #apply
165 const_iterator begin() const throw() { return a_items; }
168 * Devuelve el iterador al final de los elementos obtenidos por #apply
169 * \return el iterador al final de los elementos obtenidos por #apply
171 const_iterator end() const throw() { return a_items + a_maxItem; }
174 Devuelve la cadena referenciada por el iterator recibido como parametro.
175 \return la cadena referenciada por el iterator recibido como parametro.
177 static const char* data(const_iterator ii) throw() { return *ii; }
180 static const int MaxItem;
182 anna::DataBlock a_dataBlock;
183 bool a_activateStrip;
187 static char* strip(char* str) throw();
189 void indexException(const int index, const char* fromFile, const int fromLine) const throw(RuntimeException);