#include "plaqui/server/string.h"
#include <cctype>
#include <algorithm>
+#include <iterator>
+#include <sstream>
#ifdef DEBUG
# include <iostream>
#endif // DEBUG
-const std::string PlaQui::Server::String::SPACE_CHARS = " \t\n\r";
+using namespace std;
-PlaQui::Server::String::~String(void) {
+namespace PlaQui {
+
+namespace Server {
+
+const string String::SPACE_CHARS = " \t\n\r";
+
+String::~String(void) {
+}
+
+String::String(void) {
}
-PlaQui::Server::String::String(const std::string& str):
- std::string(str.c_str()) {
+String::String(const string& str):
+ string(str.c_str()) {
}
-PlaQui::Server::String& PlaQui::Server::String::trim(
- const PlaQui::Server::String& clist) {
+String::String(const vector<string>& v, const string& sep) {
+ (*this) = join(v, sep);
+}
+
+String& String::trim(const String& clist) {
erase(0, find_first_not_of(clist));
erase(find_last_not_of(clist) + 1);
return *this;
}
-PlaQui::Server::String& PlaQui::Server::String::to_lower(void) {
- std::transform(begin(), end(), begin(), tolower);
+String& String::to_lower(void) {
+ transform(begin(), end(), begin(), ::tolower);
+ return *this;
+}
+
+String& String::to_upper(void) {
+ transform(begin(), end(), begin(), ::toupper);
return *this;
}
-PlaQui::Server::String& PlaQui::Server::String::to_upper(void) {
- std::transform(begin(), end(), begin(), toupper);
+vector<string> String::split(char sep) const {
+ vector<string> v;
+ String::size_type start = 0;
+ String::size_type end = find(sep);
+ while (end != String::npos) {
+ v.push_back(substr(start, end - start));
+ start = end + 1;
+ end = find(sep, start);
+ }
+ if (start != length()) {
+ v.push_back(substr(start, end - start));
+ }
+ return v;
+}
+
+String String::join(const vector<string>& v, const string& sep) {
+ stringstream ss;
+ std::copy(v.begin(), v.end(), ostream_iterator<string>(ss, sep.c_str()));
+ return ss.str();
+}
+
+/*
+template < class T > T& String::to(T& p) const {
+ stringstream ss(*this);
+ ss >> p;
+ return p;
+}
+
+template < class T > String& String::from(const T& p) {
+ stringstream ss;
+ ss << p;
+ ss >> (*this);
return *this;
}
+*/
+
+} // namespace Server
+
+} // namespace PlaQui