00001 00020 #ifndef ARXX_URI_H 00021 #define ARXX_URI_H 00022 00023 #include <map> 00024 #include <string> 00025 00032 namespace Arxx 00033 { 00037 class URI 00038 { 00039 public: 00045 URI(void); 00046 00051 URI(const std::string & sURI); 00052 00057 URI(const char * pcURI); 00058 00062 bool bIsValid(void) const; 00063 00067 const std::string & sGetURI(void) const; 00068 00072 const std::string & sGetScheme(void) const; 00073 00077 const std::string & sGetAuthority(void) const; 00078 00082 const std::string & sGetPath(void) const; 00083 00087 const std::string & sGetQuery(void) const; 00088 00096 const std::string & sGetParameter(const std::string & sName) const; 00097 00101 const std::string & sGetFragment(void) const; 00102 00107 void vSetURI(const std::string & sURI); 00108 00113 void vSetScheme(const std::string & sScheme); 00114 00119 void vSetAuthority(const std::string & sAuthority); 00120 00125 void vSetPath(const std::string & sPath); 00126 00131 void vSetQuery(const std::string & sQuery); 00132 00138 void vSetParameter(const std::string & sName, const std::string & sValue); 00139 00144 void vSetFragment(const std::string & sFragment); 00145 00149 bool operator<(const Arxx::URI & URI) const; 00150 00154 void vInvalidate(void); 00155 private: 00159 void vPartition(void) const; 00160 00164 void vPartitionQuery(void) const; 00165 00169 void vConcatenate(void) const; 00170 00174 void vConcatenateQuery(void) const; 00175 00179 mutable std::string m_sURI; 00180 00184 mutable std::string m_sScheme; 00185 00189 mutable std::string m_sAuthority; 00190 00194 mutable std::string m_sPath; 00195 00199 mutable std::string m_sQuery; 00200 00204 mutable std::string m_sFragment; 00205 00209 mutable bool m_bIsURIValid; 00210 00214 mutable bool m_bArePartsValid; 00215 00219 mutable bool m_bIsQueryValid; 00220 00226 mutable bool m_bAreQueryPartsValid; 00227 00233 mutable std::map< std::string, std::string > m_Query; 00234 }; 00235 00236 std::ostream & operator<<(std::ostream & OStream, const Arxx::URI & URI); 00237 } 00238 00239 #endif