Use std::string_view for key type in json::Object (#7062)

This commit is contained in:
Siarhei Fedartsou
2024-11-03 18:23:23 +01:00
committed by GitHub
parent 48e8382785
commit 3614af7f64
7 changed files with 25 additions and 16 deletions
+8 -1
View File
@@ -9,12 +9,17 @@
#include <rapidjson/document.h>
#include <sstream>
#include <stdexcept>
#include <unordered_set>
using namespace osrm;
namespace
{
// we use std::string_view as a key in the object, so since here we have dynamic keys we have to
// "hold" them somewhere okay for tests...
static std::unordered_set<std::string> gKeysHolder;
void convert(const rapidjson::Value &value, json::Value &result)
{
if (value.IsString())
@@ -32,7 +37,8 @@ void convert(const rapidjson::Value &value, json::Value &result)
{
json::Value member;
convert(itr->value, member);
object.values.emplace(itr->name.GetString(), std::move(member));
auto keyItr = gKeysHolder.emplace(itr->name.GetString()).first;
object.values.emplace(*keyItr, std::move(member));
}
result = std::move(object);
}
@@ -122,6 +128,7 @@ int main(int argc, char **argv)
if (std::string{out_vec.begin(), out_vec.end()} != out_str || out_str != out_ss_str)
{
std::cerr << "Vector/string results are not equal\n";
throw std::logic_error("Vector/stringstream/string results are not equal");
}
return EXIT_SUCCESS;