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;
}
|