mirror of https://github.com/PurpleI2P/i2pd.git
I2P: End-to-End encrypted and anonymous Internet
https://i2pd.website/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
#pragma once |
|
|
|
#include <string> |
|
#include <nlohmann/detail/macro_scope.hpp> |
|
|
|
namespace nlohmann |
|
{ |
|
namespace detail |
|
{ |
|
|
|
/*! |
|
@brief replace all occurrences of a substring by another string |
|
|
|
@param[in,out] s the string to manipulate; changed so that all |
|
occurrences of @a f are replaced with @a t |
|
@param[in] f the substring to replace with @a t |
|
@param[in] t the string to replace @a f |
|
|
|
@pre The search string @a f must not be empty. **This precondition is |
|
enforced with an assertion.** |
|
|
|
@since version 2.0.0 |
|
*/ |
|
inline void replace_substring(std::string& s, const std::string& f, |
|
const std::string& t) |
|
{ |
|
JSON_ASSERT(!f.empty()); |
|
for (auto pos = s.find(f); // find first occurrence of f |
|
pos != std::string::npos; // make sure f was found |
|
s.replace(pos, f.size(), t), // replace with t, and |
|
pos = s.find(f, pos + t.size())) // find next occurrence of f |
|
{} |
|
} |
|
|
|
/*! |
|
* @brief string escaping as described in RFC 6901 (Sect. 4) |
|
* @param[in] s string to escape |
|
* @return escaped string |
|
* |
|
* Note the order of escaping "~" to "~0" and "/" to "~1" is important. |
|
*/ |
|
inline std::string escape(std::string s) |
|
{ |
|
replace_substring(s, "~", "~0"); |
|
replace_substring(s, "/", "~1"); |
|
return s; |
|
} |
|
|
|
/*! |
|
* @brief string unescaping as described in RFC 6901 (Sect. 4) |
|
* @param[in] s string to unescape |
|
* @return unescaped string |
|
* |
|
* Note the order of escaping "~1" to "/" and "~0" to "~" is important. |
|
*/ |
|
static void unescape(std::string& s) |
|
{ |
|
replace_substring(s, "~1", "/"); |
|
replace_substring(s, "~0", "~"); |
|
} |
|
|
|
} // namespace detail |
|
} // namespace nlohmann
|
|
|