Improve URL string conversions and ostream support

This commit is contained in:
Vinnie Falco
2013-10-30 14:22:51 -07:00
parent 4ed36da458
commit ef94f42b62
3 changed files with 30 additions and 10 deletions

View File

@@ -22,6 +22,8 @@
#include "../strings/String.h"
#include <ios>
namespace beast {
/** A URL.
@@ -90,7 +92,10 @@ public:
String userinfo () const;
/** Retrieve the full URL as a single string. */
String full () const;
/** @{ */
String toString () const;
std::string to_string() const;
/** @} */
private:
String m_scheme;
@@ -105,14 +110,18 @@ private:
/** URL comparisons. */
/** @{ */
inline bool operator== (URL const& lhs, URL const& rhs) { return lhs.full() == rhs.full(); }
inline bool operator!= (URL const& lhs, URL const& rhs) { return ! (lhs.full() == rhs.full()); }
inline bool operator< (URL const& lhs, URL const& rhs) { return lhs.full() < rhs.full(); }
inline bool operator> (URL const& lhs, URL const& rhs) { return rhs.full() < lhs.full(); }
inline bool operator<= (URL const& lhs, URL const& rhs) { return ! (rhs.full() < lhs.full()); }
inline bool operator>= (URL const& lhs, URL const& rhs) { return ! (lhs.full() < rhs.full()); }
inline bool operator== (URL const& lhs, URL const& rhs) { return lhs.toString() == rhs.toString(); }
inline bool operator!= (URL const& lhs, URL const& rhs) { return ! (lhs.toString() == rhs.toString()); }
inline bool operator< (URL const& lhs, URL const& rhs) { return lhs.toString() < rhs.toString(); }
inline bool operator> (URL const& lhs, URL const& rhs) { return rhs.toString() < lhs.toString(); }
inline bool operator<= (URL const& lhs, URL const& rhs) { return ! (rhs.toString() < lhs.toString()); }
inline bool operator>= (URL const& lhs, URL const& rhs) { return ! (lhs.toString() < rhs.toString()); }
/** @} */
/** Output stream conversion. */
std::ostream& operator<< (std::ostream& os, URL const& url);
/** boost::hash support */
extern std::size_t hash_value (beast::URL const& url);
}

View File

@@ -155,7 +155,7 @@ public:
{
ParsedURL result (url);
expect (result.error () == 0);
expect (result.url ().full () == url);
expect (result.url ().toString () == url);
}
void testURL ()

View File

@@ -128,7 +128,7 @@ String URL::userinfo () const
foo://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose
*/
String URL::full () const
String URL::toString () const
{
String s;
@@ -153,11 +153,22 @@ String URL::full () const
return s;
}
std::string URL::to_string() const
{
return toString().toStdString();
}
std::ostream& operator<< (std::ostream &os, URL const& url)
{
os << url.to_string();
return os;
}
//------------------------------------------------------------------------------
std::size_t hash_value (URL const& v)
{
return std::size_t (v.full().hash());
return std::size_t (v.toString().hash());
}
}