From 544559609b89cc6a45aa4eddd5cfa8eebd44864e Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 6 May 2018 12:14:34 +0100 Subject: C++17 JSON Updates to match the new pure C++17 JSON interface --- slicer/json/serializer.cpp | 64 ++++++++++++++++++++++----------------------- slicer/test/serializers.cpp | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/slicer/json/serializer.cpp b/slicer/json/serializer.cpp index bf0af58..cd9b6b0 100644 --- a/slicer/json/serializer.cpp +++ b/slicer/json/serializer.cpp @@ -32,42 +32,42 @@ namespace Slicer { void set(bool & v) const override { - v = boost::get(value); + v = std::get(value); } void set(Ice::Byte & v) const override { - v = boost::numeric_cast(boost::get(value)); + v = boost::numeric_cast(std::get(value)); } void set(Ice::Short & v) const override { - v = boost::numeric_cast(boost::get(value)); + v = boost::numeric_cast(std::get(value)); } void set(Ice::Int & v) const override { - v = boost::numeric_cast(boost::get(value)); + v = boost::numeric_cast(std::get(value)); } void set(Ice::Long & v) const override { - v = boost::numeric_cast(boost::get(value)); + v = boost::numeric_cast(std::get(value)); } void set(Ice::Float & v) const override { - v = boost::numeric_cast(boost::get(value)); + v = boost::numeric_cast(std::get(value)); } void set(Ice::Double & v) const override { - v = boost::numeric_cast(boost::get(value)); + v = boost::numeric_cast(std::get(value)); } void set(std::string & v) const override { - v = boost::get(value); + v = std::get(value); } protected: @@ -126,7 +126,7 @@ namespace Slicer { json::Value & target; }; - class DocumentTreeIterate : public boost::static_visitor<> { + class DocumentTreeIterate { public: DocumentTreeIterate(ModelPartPtr & mp) : modelPart(mp) { @@ -146,8 +146,8 @@ namespace Slicer { { if (auto typeIdName = modelPart->GetTypeIdProperty()) { auto typeAttrItr = o.find(*typeIdName); - if (typeAttrItr != o.end() && boost::get(typeAttrItr->second.get())) { - modelPart = modelPart->GetSubclassModelPart(boost::get(*typeAttrItr->second)); + if (typeAttrItr != o.end() && std::holds_alternative(typeAttrItr->second)) { + modelPart = modelPart->GetSubclassModelPart(std::get(typeAttrItr->second)); } } modelPart->Create(); @@ -160,7 +160,7 @@ namespace Slicer { key->Create(); key->SetValue(JsonValueSource(element.first)); key->Complete(); - boost::apply_visitor(DocumentTreeIterate(value), *element.second); + std::visit(DocumentTreeIterate(value), element.second); emp->Complete(); } } @@ -169,7 +169,7 @@ namespace Slicer { auto emp = modelPart->GetChild(element.first); if (emp) { emp->Create(); - boost::apply_visitor(DocumentTreeIterate(emp), *element.second); + std::visit(DocumentTreeIterate(emp), element.second); emp->Complete(); } } @@ -183,7 +183,7 @@ namespace Slicer { auto emp = modelPart->GetAnonChild(); if (emp) { emp->Create(); - boost::apply_visitor(DocumentTreeIterate(emp), *element); + std::visit(DocumentTreeIterate(emp), element); emp->Complete(); } } @@ -197,23 +197,23 @@ namespace Slicer { JsonSerializer::ModelTreeIterateSeq(json::Value * n, ModelPartPtr mp) { if (!mp->HasValue()) return; - auto arr = boost::get(n); - arr->push_back(json::ValuePtr(new json::Value())); - ModelTreeIterateRoot(arr->back().get(), mp); + auto arr = std::get_if(n); + arr->emplace_back(); + ModelTreeIterateRoot(&arr->back(), mp); } void JsonSerializer::ModelTreeIterateDictObj(json::Value * n, ModelPartPtr mp) { if (!mp->HasValue()) return; - auto obj = boost::get(n); + auto obj = std::get_if(n); json::Object::key_type k; - auto v = json::ValuePtr(new json::Value()); + json::Value v; json::Value kv; mp->GetChild(keyName)->GetValue(JsonValueTarget(kv)); JsonValueSource s(kv); s.set(k); - ModelTreeIterateRoot(v.get(), mp->GetChild(valueName)); + ModelTreeIterateRoot(&v, mp->GetChild(valueName)); obj->insert({ k, v }); } @@ -225,40 +225,40 @@ namespace Slicer { } switch (mp->GetType()) { case mpt_Null: - boost::get(*n).insert({name, json::ValuePtr(new json::Value())}); + std::get(*n).insert({name, json::Null()}); return; case mpt_Simple: { json::Value v; if (mp->GetValue(JsonValueTarget(v))) { - boost::get(*n).insert({ name, json::ValuePtr(new json::Value(v)) }); + std::get(*n).insert({ name, v }); } break; } case mpt_Complex: if (mp->HasValue()) { - auto nn = json::ValuePtr(new json::Value(json::Object())); + json::Object nn; if (auto typeIdName = mp->GetTypeIdProperty()) { if (auto typeId = mp->GetTypeId()) { - boost::get(*nn).insert({*typeIdName, json::ValuePtr(new json::Value(*typeId))}); + nn.insert({*typeIdName, *typeId}); mp = mp->GetSubclassModelPart(*typeId); } } - mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterate, boost::get(*n).insert({name, nn}).first->second.get(), _1, _2)); + mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterate, &std::get(*n).insert({name, nn}).first->second, _1, _2)); } break; case mpt_Sequence: if (mp->HasValue()) { - mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterateSeq, boost::get(*n).insert({name, json::ValuePtr(new json::Value(json::Array()))}).first->second.get(), _2)); + mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterateSeq, &std::get(*n).insert({name, json::Array()}).first->second, _2)); } break; case mpt_Dictionary: if (mp->HasValue()) { if (metaDataFlagSet(mp->GetMetadata(), md_object)) { - mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterateDictObj, boost::get(*n).insert({name, json::ValuePtr(new json::Value(json::Object()))}).first->second.get(), _2)); + mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterateDictObj, &std::get(*n).insert({name, json::Object()}).first->second, _2)); } else { - mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterateSeq, boost::get(*n).insert({name, json::ValuePtr(new json::Value(json::Array()))}).first->second.get(), _2)); + mp->OnEachChild(std::bind(&JsonSerializer::ModelTreeIterateSeq, &std::get(*n).insert({name, json::Array()}).first->second, _2)); } } break; @@ -280,7 +280,7 @@ namespace Slicer { *n = json::Object(); if (auto typeIdName = mp->GetTypeIdProperty()) { if (auto typeId = mp->GetTypeId()) { - boost::get(*n).insert({*typeIdName, json::ValuePtr(new json::Value(*typeId))}); + std::get(*n).insert({*typeIdName, *typeId}); mp = mp->GetSubclassModelPart(*typeId); } } @@ -319,7 +319,7 @@ namespace Slicer { { json::Value obj = json::parseValue(strm); auto mp = modelRoot->GetAnonChild(); - boost::apply_visitor(DocumentTreeIterate(mp), obj); + std::visit(DocumentTreeIterate(mp), obj); } void @@ -346,7 +346,7 @@ namespace Slicer { std::ifstream inFile(path.string()); json::Value obj = json::parseValue(inFile); auto mp = modelRoot->GetAnonChild(); - boost::apply_visitor(DocumentTreeIterate(mp), obj); + std::visit(DocumentTreeIterate(mp), obj); } void @@ -372,7 +372,7 @@ namespace Slicer { JsonValueDeserializer::Deserialize(ModelPartForRootPtr modelRoot) { auto mp = modelRoot->GetAnonChild(); - boost::apply_visitor(DocumentTreeIterate(mp), value); + std::visit(DocumentTreeIterate(mp), value); } void diff --git a/slicer/test/serializers.cpp b/slicer/test/serializers.cpp index 7e1040f..775f04e 100644 --- a/slicer/test/serializers.cpp +++ b/slicer/test/serializers.cpp @@ -649,7 +649,7 @@ BOOST_AUTO_TEST_CASE( conversion ) json::Value v; Slicer::SerializeAny(obj, v); BOOST_REQUIRE_EQUAL("2016-06-30 12:34:56", - boost::get(*boost::get(v)["conv"])); + std::get(std::get(v)["conv"])); } BOOST_AUTO_TEST_SUITE_END(); -- cgit v1.2.3