diff options
-rw-r--r-- | slicer/slicer/modelParts.h | 5 | ||||
-rw-r--r-- | slicer/slicer/modelPartsTypes.impl.h | 40 | ||||
-rw-r--r-- | slicer/test/compilation.cpp | 14 |
3 files changed, 24 insertions, 35 deletions
diff --git a/slicer/slicer/modelParts.h b/slicer/slicer/modelParts.h index 452538a..b4d1eb7 100644 --- a/slicer/slicer/modelParts.h +++ b/slicer/slicer/modelParts.h @@ -125,8 +125,6 @@ namespace Slicer { const std::string * nameStr; }; - template<typename T> struct DLL_PUBLIC Default { }; - class DLL_PUBLIC ModelPart { public: ModelPart() = default; @@ -139,8 +137,7 @@ namespace Slicer { ModelPart & operator=(ModelPart &&) = delete; template<typename MP> static void Make(typename MP::element_type * t, const ModelPartHandler &); - template<typename T> static void CreateFor(T & t, const ModelPartHandler &); - template<typename T> static void CreateFor(Default<T> &&, const ModelPartHandler &); + template<typename T> static void CreateFor(T * t, const ModelPartHandler &); template<typename T> static void OnRootFor(T & t, const ModelPartRootHandler &); virtual void OnEachChild(const ChildHandler &); diff --git a/slicer/slicer/modelPartsTypes.impl.h b/slicer/slicer/modelPartsTypes.impl.h index b04def8..3fcc598 100644 --- a/slicer/slicer/modelPartsTypes.impl.h +++ b/slicer/slicer/modelPartsTypes.impl.h @@ -46,39 +46,31 @@ namespace Ice { { \ h(ModelPartForOptional<ModelPartType>(t)); \ } \ - template<> DLL_PUBLIC void ModelPart::CreateFor(Default<Type> &&, const ModelPartHandler & h) \ + template<> DLL_PUBLIC void ModelPart::CreateFor(Type * s, const ModelPartHandler & h) \ { \ - return Make<ModelPartType>(nullptr, h); \ + return Make<ModelPartType>(s, h); \ } \ - template<> DLL_PUBLIC void ModelPart::CreateFor(Default<Ice::optional<Type>> &&, const ModelPartHandler & h) \ + template<> DLL_PUBLIC void ModelPart::CreateFor(const Type * s, const ModelPartHandler & h) \ { \ - return Make<ModelPartForOptional<ModelPartType>>(nullptr, h); \ + return CreateFor(const_cast<Type *>(s), h); \ } \ - template<> DLL_PUBLIC void ModelPart::CreateFor(Type & s, const ModelPartHandler & h) \ + template<> DLL_PUBLIC void ModelPart::CreateFor(Ice::optional<Type> * s, const ModelPartHandler & h) \ { \ - return Make<ModelPartType>(&s, h); \ + return Make<ModelPartForOptional<ModelPartType>>(s, h); \ } \ - template<> DLL_PUBLIC void ModelPart::CreateFor(const Type & s, const ModelPartHandler & h) \ + template<> DLL_PUBLIC void ModelPart::CreateFor(const Ice::optional<Type> * s, const ModelPartHandler & h) \ { \ - return CreateFor(const_cast<Type &>(s), h); \ - } \ - template<> DLL_PUBLIC void ModelPart::CreateFor(Ice::optional<Type> & s, const ModelPartHandler & h) \ - { \ - return Make<ModelPartForOptional<ModelPartType>>(&s, h); \ - } \ - template<> DLL_PUBLIC void ModelPart::CreateFor(const Ice::optional<Type> & s, const ModelPartHandler & h) \ - { \ - return CreateFor(const_cast<Ice::optional<Type> &>(s), h); \ + return CreateFor(const_cast<Ice::optional<Type> *>(s), h); \ } \ template<> DLL_PUBLIC void ModelPart::OnRootFor(Type & s, const ModelPartRootHandler & h) \ { \ - return CreateFor(s, [&s, &h](auto && mp) { \ + return CreateFor(&s, [&s, &h](auto && mp) { \ h(ModelPartForRoot<Type>(&s, mp)); \ }); \ } \ template<> DLL_PUBLIC void ModelPart::OnRootFor(Ice::optional<Type> & s, const ModelPartRootHandler & h) \ { \ - return CreateFor(s, [&s, &h](auto && mp) { \ + return CreateFor(&s, [&s, &h](auto && mp) { \ h(ModelPartForRoot<Ice::optional<Type>>(&s, mp)); \ }); \ } \ @@ -499,7 +491,7 @@ namespace Slicer { void ModelPartForClass<T>::CreateModelPart(void * p, const ModelPartHandler & h) { - return ::Slicer::ModelPart::CreateFor(*static_cast<element_type *>(p), h); + return ::Slicer::ModelPart::CreateFor(static_cast<element_type *>(p), h); } template<typename T> @@ -606,7 +598,7 @@ namespace Slicer { { BOOST_ASSERT(this->Model); for (auto & element : *this->Model) { - ModelPart::CreateFor(element, [&ch](auto && mp) { + ModelPart::CreateFor(&element, [&ch](auto && mp) { ch(elementName, mp, nullptr); }); } @@ -617,7 +609,7 @@ namespace Slicer { ModelPartForSequence<T>::OnAnonChild(const SubPartHandler & ch, const HookFilter &) { BOOST_ASSERT(this->Model); - ModelPart::CreateFor(this->Model->emplace_back(), [&ch](auto && mp) { + ModelPart::CreateFor(&this->Model->emplace_back(), [&ch](auto && mp) { ch(mp, emptyMetadata); }); return true; @@ -641,7 +633,7 @@ namespace Slicer { void ModelPartForSequence<T>::OnContained(const ModelPartHandler & h) { - return ModelPart::CreateFor(Default<typename T::value_type> {}, h); + return ModelPart::CreateFor<typename T::value_type>(nullptr, h); } // ModelPartForDictionaryElementInserter @@ -710,7 +702,7 @@ namespace Slicer { void ModelPartForStream<T>::OnContained(const ModelPartHandler & h) { - ModelPart::CreateFor(Default<T> {}, h); + ModelPart::CreateFor<T>(nullptr, h); } template<typename T> @@ -719,7 +711,7 @@ namespace Slicer { { BOOST_ASSERT(this->Model); this->Model->Produce([&ch](const T & element) { - ModelPart::CreateFor(element, [&ch](auto && mp) { + ModelPart::CreateFor(&element, [&ch](auto && mp) { ch(ModelPartForSequence<std::vector<T>>::elementName, mp, nullptr); }); }); diff --git a/slicer/test/compilation.cpp b/slicer/test/compilation.cpp index 14bf1d9..3cdfca3 100644 --- a/slicer/test/compilation.cpp +++ b/slicer/test/compilation.cpp @@ -25,7 +25,7 @@ BOOST_TEST_DONT_PRINT_LOG_VALUE(Slicer::ModelPartType) #define TypeTest(Var, Expr, Explicit, Expected, ...) \ Var obj = Expr; \ - Slicer::ModelPart::CreateFor(obj, [](auto && mpp) { \ + Slicer::ModelPart::CreateFor(&obj, [](auto && mpp) { \ BOOST_REQUIRE_EQUAL(Slicer::Expected, mpp->GetType()); \ \ BOOST_TEST_CONTEXT(#Var) { \ @@ -176,7 +176,7 @@ BOOST_AUTO_TEST_CASE(normalClassTypeId) { TestModule::BasePtr base = std::make_shared<TestModule::Base>(1); BOOST_REQUIRE(base); - Slicer::ModelPart::CreateFor(base, [](auto && a) { + Slicer::ModelPart::CreateFor(&base, [](auto && a) { BOOST_REQUIRE(a); auto baseType = a->GetTypeId(); BOOST_REQUIRE(!baseType); @@ -187,7 +187,7 @@ BOOST_AUTO_TEST_CASE(normalSubClassTypeId) { TestModule::BasePtr base = std::make_shared<TestModule::D1>(1, 2); BOOST_REQUIRE(base); - Slicer::ModelPart::CreateFor(base, [](auto && a) { + Slicer::ModelPart::CreateFor(&base, [](auto && a) { BOOST_REQUIRE(a); auto baseType = a->GetTypeId(); BOOST_REQUIRE(baseType); @@ -199,7 +199,7 @@ BOOST_AUTO_TEST_CASE(normalSubSubClassTypeId) { TestModule::BasePtr base = std::make_shared<TestModule::D3>(1, 2, 3); BOOST_REQUIRE(base); - Slicer::ModelPart::CreateFor(base, [](auto && a) { + Slicer::ModelPart::CreateFor(&base, [](auto && a) { BOOST_REQUIRE(a); auto baseType = a->GetTypeId(); BOOST_REQUIRE(baseType); @@ -211,7 +211,7 @@ BOOST_AUTO_TEST_CASE(localClassTypeId) { Locals::LocalClassPtr base = std::make_shared<Locals::LocalClass>(1, "One"); BOOST_REQUIRE(base); - Slicer::ModelPart::CreateFor(base, [](auto && a) { + Slicer::ModelPart::CreateFor(&base, [](auto && a) { BOOST_REQUIRE(a); auto baseType = a->GetTypeId(); BOOST_REQUIRE(!baseType); @@ -222,7 +222,7 @@ BOOST_AUTO_TEST_CASE(localSubClassTypeId) { Locals::LocalClassPtr base = std::make_shared<Locals::LocalSubClass>(1, "One", 3.1); BOOST_REQUIRE(base); - Slicer::ModelPart::CreateFor(base, [](auto && a) { + Slicer::ModelPart::CreateFor(&base, [](auto && a) { BOOST_REQUIRE(a); auto baseType = a->GetTypeId(); BOOST_REQUIRE(baseType); @@ -234,7 +234,7 @@ BOOST_AUTO_TEST_CASE(localSubSubClassTypeId) { Locals::LocalClassPtr base = std::make_shared<Locals::LocalSub2Class>(1, "One", 3.1, 1); BOOST_REQUIRE(base); - Slicer::ModelPart::CreateFor(base, [](auto && a) { + Slicer::ModelPart::CreateFor(&base, [](auto && a) { BOOST_REQUIRE(a); auto baseType = a->GetTypeId(); BOOST_REQUIRE(baseType); |