00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef uripp_path_h
00023 #define uripp_path_h
00024 #include "apidefs.h"
00025 #include <string>
00026 #include <list>
00027 #include <iostream>
00028 namespace uripp {
00046 class URIPP_API path {
00047 public:
00048 typedef std::list<std::string> segments_type;
00049 typedef segments_type::const_iterator const_iterator;
00050 path();
00051
00052
00053
00054
00055 path(const std::string& v);
00057 bool empty() const {return segments_.empty() && !absolute_;}
00059 bool absolute() const {return absolute_;}
00061 void absolute(bool v) {absolute_ = v;}
00063 bool is_directory() const {return is_directory_;}
00065 void is_directory(bool v) {is_directory_ = v;}
00068 const std::string& front() const;
00071 const std::string& back() const;
00074 bool match_prefix(const path& rhs) const;
00075 void pop_front();
00076
00077
00078
00079
00080
00081
00082 bool pop_back(const path& back);
00083 void clear();
00084 size_t size() const {return segments_.size();}
00085 bool operator ==(const path& rhs) const;
00086 bool operator !=(const path& rhs) const {return !(*this == rhs);}
00087
00088
00089
00090
00091 bool operator <(const path& rhs) const;
00093 path operator +(const std::string& rhs) const {
00094 path result = *this;
00095 return result += rhs;
00096 }
00097 path& operator +=(const std::string& rhs);
00098
00099 path operator +(const path& rhs) const {
00100 path result = *this;
00101 return result += rhs;
00102 }
00103 path& operator +=(const path& rhs);
00104 std::string encoding() const;
00105 const_iterator begin() const {return segments_.begin();}
00106 const_iterator end() const {return segments_.end();}
00107 static const char SEPARATOR_CHAR;
00108 private:
00109 friend bool URIPP_API parse(std::string::const_iterator& first, std::string::const_iterator last, path& v, std::string* errs);
00110 bool absolute_;
00111 bool is_directory_;
00112 segments_type segments_;
00113 };
00124 bool URIPP_API parse(std::string::const_iterator& first, std::string::const_iterator last, path& v, std::string* errs = 0);
00125 std::string URIPP_API convert(const path& v);
00126
00127
00128
00129
00130 bool URIPP_API convert(const std::string& s, path& v);
00132 inline std::ostream& operator <<(std::ostream& os, const path& v) {return os << v.encoding();}
00133 }
00134 #endif