From ef94f42b62470712094af11da0389133bd6e0a35 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Wed, 30 Oct 2013 14:22:51 -0700 Subject: [PATCH] Improve URL string conversions and ostream support --- beast/http/URL.h | 23 ++++++++++++++++------- beast/http/impl/ParsedURL.cpp | 2 +- beast/http/impl/URL.cpp | 15 +++++++++++++-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/beast/http/URL.h b/beast/http/URL.h index de192be2..d9359df5 100644 --- a/beast/http/URL.h +++ b/beast/http/URL.h @@ -22,6 +22,8 @@ #include "../strings/String.h" +#include + 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); } diff --git a/beast/http/impl/ParsedURL.cpp b/beast/http/impl/ParsedURL.cpp index b76f1df6..1393b6e1 100644 --- a/beast/http/impl/ParsedURL.cpp +++ b/beast/http/impl/ParsedURL.cpp @@ -155,7 +155,7 @@ public: { ParsedURL result (url); expect (result.error () == 0); - expect (result.url ().full () == url); + expect (result.url ().toString () == url); } void testURL () diff --git a/beast/http/impl/URL.cpp b/beast/http/impl/URL.cpp index a6bab6a2..3167684d 100644 --- a/beast/http/impl/URL.cpp +++ b/beast/http/impl/URL.cpp @@ -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()); } }