00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef restcgi_utils_h
00023 #define restcgi_utils_h
00024 #include "apidefs.h"
00025 #include <string>
00026 #include <stack>
00027 namespace restcgi {
00032 std::string RESTCGI_API encode_ctl(const std::string& v);
00034 class tiny_parser {
00035 public:
00037 tiny_parser(std::string::const_iterator first, std::string::const_iterator last): first_(first), last_(last) {}
00038 bool space(size_t size = 0);
00039 bool operator ()(const char* p);
00040 int digits(size_t num, bool leading0 = true);
00041 int array_item(const char** a, size_t size);
00042 bool at_end() const {return first_ == last_;}
00043 void push() {stack_.push(first_);}
00044 void pop() {first_ = stack_.top(); stack_.pop();}
00045 const std::string::const_iterator& first() const {return first_;}
00046 private:
00047 std::string::const_iterator first_;
00048 std::string::const_iterator last_;
00049 std::stack<std::string::const_iterator> stack_;
00050 };
00051 }
00052 #endif