X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FUri-inl.h;h=50d57c2ed53f2fccc01154d498749c885bc3d0a9;hp=3132f10fa35e78f667b60a32ac3c6b457ed5ea4b;hb=db13010c1338d471c713a652e0940afba627b8bc;hpb=321542683a01c3f334047531e9b487f047129775 diff --git a/folly/Uri-inl.h b/folly/Uri-inl.h index 3132f10f..50d57c2e 100644 --- a/folly/Uri-inl.h +++ b/folly/Uri-inl.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +18,40 @@ #error This file may only be included from folly/Uri.h #endif +#include +#include + #include +#include namespace folly { +namespace uri_detail { + +using UriTuple = std::tuple< + const std::string&, + const std::string&, + const std::string&, + const std::string&, + uint16_t, + const std::string&, + const std::string&, + const std::string&>; + +inline UriTuple as_tuple(const folly::Uri& k) { + return UriTuple( + k.scheme(), + k.username(), + k.password(), + k.host(), + k.port(), + k.path(), + k.query(), + k.fragment()); +} + +} // namespace uri_detail + template String Uri::toString() const { String str; @@ -49,4 +79,23 @@ String Uri::toString() const { return str; } -} // namespace folly +} // namespace folly + +namespace std { + +template <> +struct hash { + std::size_t operator()(const folly::Uri& k) const { + return std::hash{}( + folly::uri_detail::as_tuple(k)); + } +}; + +template <> +struct equal_to { + bool operator()(const folly::Uri& a, const folly::Uri& b) const { + return folly::uri_detail::as_tuple(a) == folly::uri_detail::as_tuple(b); + } +}; + +} // namespace std