44 v1[0] =
"2"; v1[1] =
"2.0"; v1[2] =
"3.2"; v1[3] =
"3.3"; v1[4] =
"3.4";
45 v1[5] =
"4"; v1[6] =
"4.0";
46 value_set_t vs = value_set_t(v1.begin(), v1.end());
47 d_known_keywords[
"dap"] = vs;
50 v2[0] =
"md5"; v2[1] =
"MD5"; v2[2] =
"sha1"; v2[3] =
"SHA1";
51 value_set_t vs2 = value_set_t(v2.begin(), v2.end());
52 d_known_keywords[
"checksum"] = vs2;
66static bool f_parse_keyword(
const string &kw,
string &word,
string &value)
70 string::size_type i = kw.find(
'(');
71 if (i == string::npos)
73 word = kw.substr(0, i);
74 string::size_type j = kw.find(
')');
75 if (j == string::npos)
78 value = kw.substr(i, j-i);
80 return (!word.empty() && !value.empty());
89void Keywords::m_add_keyword(
const keyword &word,
const keyword_value &value)
91 d_parsed_keywords[word] = value;
101bool Keywords::m_is_valid_keyword(
const keyword &word,
const keyword_value &value)
const
103 map<keyword, value_set_t>::const_iterator ci = d_known_keywords.find(word);
104 if (ci == d_known_keywords.end())
107 value_set_t vs = ci->second;
109 if (vs.find(value) == vs.end())
110 throw Error(
"Bad value passed to the keyword/function: " + word);
123 return d_known_keywords.count(word) == 1;
134 map<keyword, keyword_value>::const_iterator i;
135 for (i = d_parsed_keywords.begin(); i != d_parsed_keywords.end(); ++i)
136 kws.push_front((*i).first);
150 return d_parsed_keywords.count(kw) == 1;
160 if (d_known_keywords.find(kw) == d_known_keywords.end())
161 throw Error(
"Keyword not known (" + kw +
")");
163 return d_parsed_keywords.find(kw)->second;
174 string projection =
www2id(ce,
"%",
"%20");
175 string selection =
"";
178 string::size_type amp = projection.find(
'&');
179 if (amp != string::npos) {
180 selection = projection.substr(amp);
181 projection = projection.substr(0, amp);
188 while (!projection.empty()) {
189 string::size_type i = projection.find(
',');
190 string next_word = projection.substr(0, i);
192 if (f_parse_keyword(next_word, word, value)
193 && m_is_valid_keyword(word, value)) {
194 m_add_keyword(word, value);
195 if (i != string::npos)
196 projection = projection.substr(i + 1);
206 return projection + selection;
A class for error processing.
virtual keyword_value get_keyword_value(const keyword &kw) const
virtual list< keyword > get_keywords() const
virtual bool has_keyword(const keyword &kw) const
virtual bool is_known_keyword(const string &s) const
virtual string parse_keywords(const string &ce)
top level DAP object to house generic methods
string www2id(const string &in, const string &escape, const string &except)