uri: use vector rather than map for query exploding
This commit is contained in:
parent
4e4e731cb7
commit
805ba5d1bf
10
uri.cpp
10
uri.cpp
@ -211,14 +211,14 @@ void uri::clear_fragment ()
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
std::map<std::string, std::string>
|
std::vector<std::pair<std::string, std::string>>
|
||||||
cruft::query_to_map (std::string_view val)
|
cruft::query_to_vector (std::string_view val)
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string> res;
|
std::vector<std::pair<std::string, std::string>> res;
|
||||||
|
|
||||||
for (auto const tok: cruft::tokeniser (val, '&')) {
|
for (auto const tok: cruft::tokeniser (val, '&')) {
|
||||||
auto const &[k, v] = cruft::split_on (tok, '=');
|
auto const &[k, v] = cruft::split_on (tok, '=');
|
||||||
res.emplace (
|
res.emplace_back (
|
||||||
std::string (k.begin (), k.size ()),
|
std::string (k.begin (), k.size ()),
|
||||||
std::string (v.begin (), v.size ())
|
std::string (v.begin (), v.size ())
|
||||||
);
|
);
|
||||||
@ -230,7 +230,7 @@ cruft::query_to_map (std::string_view val)
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
std::string
|
std::string
|
||||||
cruft::map_to_query (std::map<std::string, std::string> const &val)
|
cruft::vector_to_query (std::vector<std::pair<std::string, std::string>> const &val)
|
||||||
{
|
{
|
||||||
// Test for empty up front so that we can simplify the string
|
// Test for empty up front so that we can simplify the string
|
||||||
// concatenation below.
|
// concatenation below.
|
||||||
|
14
uri.hpp
14
uri.hpp
@ -114,8 +114,18 @@ namespace cruft {
|
|||||||
std::string m_value;
|
std::string m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::map<std::string, std::string> query_to_map (std::string_view);
|
/// Break a query string into a sequence of key-value pairs.
|
||||||
std::string map_to_query (std::map<std::string, std::string> const&);
|
/// Duplicates are possible.
|
||||||
|
/// vector is used to that order can be preserved
|
||||||
|
/// The is the inverse of vector_to_query
|
||||||
|
std::vector<std::pair<std::string, std::string>>
|
||||||
|
query_to_vector (std::string_view);
|
||||||
|
|
||||||
|
/// Convert a sequence of key-value pairs into a query string
|
||||||
|
/// All pairs, including duplicates, are serialised in the provided order.
|
||||||
|
/// This is the inverse of query_to_vector
|
||||||
|
std::string
|
||||||
|
vector_to_query (std::vector<std::pair<std::string, std::string>> const&);
|
||||||
|
|
||||||
bool operator== (uri const&, uri const&) noexcept;
|
bool operator== (uri const&, uri const&) noexcept;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user