00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef uripp_query_h
00023 #define uripp_query_h
00024 #include "apidefs.h"
00025 #include "utils.h"
00026 #include <string>
00027 #include <vector>
00028 #include <iostream>
00029 namespace uripp {
00049 class URIPP_API query : public std::vector<std::pair<std::string, std::string> > {
00050 public:
00051 query();
00052
00053
00054
00055
00056
00057 query(const std::string& v, bool dosort = false);
00060 void sort();
00061 bool sorted() const {return sorted_;}
00062 std::string encoding() const;
00063
00064
00065 const_iterator find(const std::string& key) const;
00068 iterator find(const std::string& key);
00074 template<typename T> bool find(const std::string& key, T& value, bool& is_null) const {
00075 const_iterator it = find(key);
00076 if (it == end())
00077 return false;
00078 is_null = !convert(it->second, value);
00079 return true;
00080 }
00081 static const char PAIRS_SEP_CHAR;
00082 static const char KEY_VALUE_SEP_CHAR;
00083 private:
00084 friend bool URIPP_API parse(std::string::const_iterator& first, std::string::const_iterator last, query& v, std::string* errs);
00085 bool sorted_;
00086 };
00102 bool URIPP_API parse(std::string::const_iterator& first, std::string::const_iterator last, query& v, std::string* errs = 0);
00104 inline std::ostream& operator <<(std::ostream& os, const query& v) {return os << v.encoding();}
00105 }
00106 #endif