From 9163348c049c67b14b39a0218ba7762ded370ca0 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 4 Sep 2023 18:01:14 +0100 Subject: Simplify defining ModelPartForRoots for base types --- slicer/slicer/modelPartsTypes.cpp | 40 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/slicer/slicer/modelPartsTypes.cpp b/slicer/slicer/modelPartsTypes.cpp index dcfd338..a65d2e7 100644 --- a/slicer/slicer/modelPartsTypes.cpp +++ b/slicer/slicer/modelPartsTypes.cpp @@ -74,32 +74,20 @@ namespace Slicer { return name; } - template<> const std::string Slicer::ModelPartForRoot::rootName = "String"; - template<> const std::string Slicer::ModelPartForRoot::rootName = "Boolean"; - template<> const std::string Slicer::ModelPartForRoot::rootName = "Float"; - template<> const std::string Slicer::ModelPartForRoot::rootName = "Double"; - template<> const std::string Slicer::ModelPartForRoot::rootName = "Byte"; - template<> const std::string Slicer::ModelPartForRoot::rootName = "Short"; - template<> const std::string Slicer::ModelPartForRoot::rootName = "Int"; - template<> const std::string Slicer::ModelPartForRoot::rootName = "Long"; - - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalString"; - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalBoolean"; - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalFloat"; - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalDouble"; - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalByte"; - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalShort"; - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalInt"; - template<> const std::string Slicer::ModelPartForRoot>::rootName = "OptionalLong"; - - MODELPARTFOR(std::string, ModelPartForSimple) - MODELPARTFOR(bool, ModelPartForSimple) - MODELPARTFOR(Ice::Float, ModelPartForSimple) - MODELPARTFOR(Ice::Double, ModelPartForSimple) - MODELPARTFOR(Ice::Byte, ModelPartForSimple) - MODELPARTFOR(Ice::Short, ModelPartForSimple) - MODELPARTFOR(Ice::Int, ModelPartForSimple) - MODELPARTFOR(Ice::Long, ModelPartForSimple) +#define Roots(Type, Name) \ + template<> constinit const std::string Slicer::ModelPartForRoot::rootName {#Name}; \ + template<> constinit const std::string Slicer::ModelPartForRoot>::rootName {"Optional" #Name}; \ + MODELPARTFOR(Type, ModelPartForSimple) + + Roots(std::string, String); + Roots(bool, Boolean); + Roots(Ice::Float, Float); + Roots(Ice::Double, Double); + Roots(Ice::Byte, Byte); + Roots(Ice::Short, Short); + Roots(Ice::Int, Int); + Roots(Ice::Long, Long); +#undef RootNames bool optionalCaseEq(std::string_view a, std::string_view b, bool matchCase) -- cgit v1.2.3