Re run make amalgamate

This commit is contained in:
Raphael Grimm 2021-10-31 13:30:58 +01:00 committed by barcode
parent 51d8c28ea5
commit 8f4d8a6f93
2 changed files with 102 additions and 65 deletions

View File

@ -10,11 +10,11 @@ namespace detail
struct json_default_base {}; struct json_default_base {};
template<class T> template<class T>
using json_base_class = typename std::conditional< using json_base_class = typename std::conditional <
std::is_same<T, void>::value, std::is_same<T, void>::value,
json_default_base, json_default_base,
T T
>::type; >::type;
} // namespace detail } // namespace detail
} // namespace nlohmann } // namespace nlohmann

View File

@ -66,7 +66,7 @@ using json_with_metadata =
nlohmann::adl_serializer, nlohmann::adl_serializer,
std::vector<std::uint8_t>, std::vector<std::uint8_t>,
json_metadata<T> json_metadata<T>
>; >;
TEST_CASE("JSON Node Metadata") TEST_CASE("JSON Node Metadata")
{ {
@ -216,18 +216,18 @@ class visitor_adaptor
}; };
using json_with_visitor_t = nlohmann::basic_json < using json_with_visitor_t = nlohmann::basic_json <
std::map, std::map,
std::vector, std::vector,
std::string, std::string,
bool, bool,
std::int64_t, std::int64_t,
std::uint64_t, std::uint64_t,
double, double,
std::allocator, std::allocator,
nlohmann::adl_serializer, nlohmann::adl_serializer,
std::vector<std::uint8_t>, std::vector<std::uint8_t>,
visitor_adaptor visitor_adaptor
>; >;
template <class Fnc> template <class Fnc>
@ -241,30 +241,45 @@ void visitor_adaptor::do_visit(const Ptr& ptr, const Fnc& fnc) const
{ {
using value_t = nlohmann::detail::value_t; using value_t = nlohmann::detail::value_t;
const json_with_visitor_t& json = *static_cast<const json_with_visitor_t*>(this); const json_with_visitor_t& json = *static_cast<const json_with_visitor_t*>(this);
switch(json.type()) switch (json.type())
{ {
case value_t::object: case value_t::object:
for(const auto& entry : json.items()) for (const auto& entry : json.items())
{ {
entry.value().do_visit(ptr/entry.key(), fnc); entry.value().do_visit(ptr / entry.key(), fnc);
} }
break; break;
case value_t::array: case value_t::array:
for(std::size_t i = 0; i < json.size(); ++i) for (std::size_t i = 0; i < json.size(); ++i)
{ {
json.at(i).do_visit(ptr/std::to_string(i), fnc); json.at(i).do_visit(ptr / std::to_string(i), fnc);
} }
break; break;
case value_t::discarded: break; case value_t::discarded:
case value_t::null: fnc(ptr, json); break; break;
case value_t::string: fnc(ptr, json); break; case value_t::null:
case value_t::boolean: fnc(ptr, json); break; fnc(ptr, json);
case value_t::number_integer: fnc(ptr, json); break; break;
case value_t::number_unsigned: fnc(ptr, json); break; case value_t::string:
case value_t::number_float: fnc(ptr, json); break; fnc(ptr, json);
case value_t::binary: fnc(ptr, json); break; break;
default: case value_t::boolean:
fnc(ptr, json); fnc(ptr, json);
break;
case value_t::number_integer:
fnc(ptr, json);
break;
case value_t::number_unsigned:
fnc(ptr, json);
break;
case value_t::number_float:
fnc(ptr, json);
break;
case value_t::binary:
fnc(ptr, json);
break;
default:
fnc(ptr, json);
} }
} }
@ -303,32 +318,54 @@ TEST_CASE("JSON Visit Node")
}; };
json.visit( json.visit(
[&](const json_with_visitor_t::json_pointer& p, [&](const json_with_visitor_t::json_pointer & p,
const json_with_visitor_t& j) const json_with_visitor_t& j)
{
std::stringstream str;
str << p.to_string() << " - " ;
using value_t = nlohmann::detail::value_t;
switch (j.type())
{ {
std::stringstream str; case value_t::object:
str << p.to_string() << " - " ; str << "object";
using value_t = nlohmann::detail::value_t; break;
switch(j.type()) case value_t::array:
{ str << "array";
case value_t::object: str << "object"; break; break;
case value_t::array: str << "array"; break; case value_t::discarded:
case value_t::discarded: str << "discarded"; break; str << "discarded";
case value_t::null: str << "null"; break; break;
case value_t::string: str << "string"; break; case value_t::null:
case value_t::boolean: str << "boolean"; break; str << "null";
case value_t::number_integer: str << "number_integer"; break; break;
case value_t::number_unsigned: str << "number_unsigned"; break; case value_t::string:
case value_t::number_float: str << "number_float"; break; str << "string";
case value_t::binary: str << "binary"; break; break;
default: str << "error"; break; case value_t::boolean:
} str << "boolean";
str << " - " << j.dump(); break;
CHECK(json.at(p) == j); case value_t::number_integer:
INFO(str.str()); str << "number_integer";
CHECK(expected.count(str.str()) == 1); break;
expected.erase(str.str()); case value_t::number_unsigned:
str << "number_unsigned";
break;
case value_t::number_float:
str << "number_float";
break;
case value_t::binary:
str << "binary";
break;
default:
str << "error";
break;
} }
str << " - " << j.dump();
CHECK(json.at(p) == j);
INFO(str.str());
CHECK(expected.count(str.str()) == 1);
expected.erase(str.str());
}
); );
CHECK(expected.empty()); CHECK(expected.empty());
} }