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
|