From: Gonzalo A. <ga...@us...> - 2006-09-08 14:27:13
|
Update of /cvsroot/mod-c/ehtml/src In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv14047/src Added Files: Dictionary.cpp Log Message: * Dictionary: a convenience child of map<string,string> --- NEW FILE: Dictionary.cpp --- #include "Dictionary.h" #include "Common.h" #include <sstream> using namespace std; //void replace(string& s, const char* a, const char* b) { // size_type i = 0; // size_t a_len = strlen(a); // size_t b_len = strlen(a); // while (i = s.find(a, i), i != string::npos) { // s.replace(i, a_len, b); // i += b_len - a_len; // } //} string Dictionary::Serialize() { string str; for (Dictionary::iterator i = begin(); i != end(); ++i) { string k = urlencode(i->first); string v = urlencode(i->second); str += k + " " + v + "\n"; } return str; } ostream& operator << (ostream& o, Dictionary& d) { for (Dictionary::iterator i = d.begin(); i != d.end(); ++i) o << urlencode(i->first) << " " << urlencode(i->second) << "\n"; return o; } bool Dictionary::Marshall(const string& s) { size_type i = 0; size_type ii = 0; while (i = s.find("\n", i), i != string::npos) { size_type sp = s.find(" ", ii); if (sp > i || sp == string::npos) return false; string k, v; k.assign(s, ii, sp-ii); v.assign(s, sp+1, i-sp); ii = ++i; k = urldecode(k).AsString(); v = urldecode(v).AsString(); if (!insert(pair<string,string>(k,v)).second) return false; } return true; } istream& operator >> (istream& i, Dictionary& d) { char line[512]; while (!i.getline(line,sizeof(line)-1)) { istringstream l(line); string k, v; l >> k; if (!l); throw "Invalid input stream"; l >> v; if (!l.eof()) throw "Invalid input stream"; // should check that urldecode(k) is not present. d[urldecode(k).AsString()] = urldecode(v).AsString(); } return i; } |