From: Christian P. <cp...@us...> - 2005-07-01 13:55:25
|
Update of /cvsroot/pclasses/pclasses2/include/pclasses In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18224/include/pclasses Modified Files: StringList.h Log Message: - Added Traits::LexT<StringList<std::string> >, Traits::LexT<StringList<Unicode::String> >, Traits::LexT<Unicode::String> Index: StringList.h =================================================================== RCS file: /cvsroot/pclasses/pclasses2/include/pclasses/StringList.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- StringList.h 6 May 2005 15:28:51 -0000 1.3 +++ StringList.h 1 Jul 2005 13:55:09 -0000 1.4 @@ -21,7 +21,11 @@ #ifndef P_StringList_h #define P_StringList_h +#include <pclasses/Trace.h> +#include <pclasses/LexT.h> + #include <list> +#include <string> namespace P { @@ -37,18 +41,37 @@ StringList(const string_list& lst) : string_list(lst) { } + StringList(const StringList& lst) + : string_list(lst) { } + StringList(const StringType& str, const StringType& separator) { - *this = fromString(str, separator); + *this = split(str, separator); } //! Join all strings into a single string StringType join(const StringType& separator) const { - StringType ret; + size_t separatorLen = separator.size(); + size_t stringLen = 0; + + // pre-calculate string-length ... typename string_list::const_iterator i = this->begin(); while(i != this->end()) { + stringLen += (*i).size(); + ++i; + if(i != this->end()) + stringLen += separatorLen; + } + + StringType ret; + ret.reserve(stringLen); + + // now build the string ... + i = this->begin(); + while(i != this->end()) + { ret += *i; ++i; if(i != this->end()) @@ -59,7 +82,7 @@ } //! Tokenize string into list of strings - static string_list fromString(const StringType& str, + static string_list split(const StringType& str, const StringType& separator) { if(str.empty()) @@ -81,9 +104,32 @@ return lst; } + StringList& operator=(const StringList& lst) + { + string_list::operator=(lst); + return *this; + } +}; + + +namespace Traits { + +template < > +struct LexT<StringList<std::string> > { + + static std::string toString(const StringList<std::string>& val) + { return val.join(","); } + + static StringList<std::string> fromString(const std::string& str) + throw(ConversionError) + { return StringList<std::string>(str, ","); } + }; +} // !namespace Traits + + } // !namespace P #endif |