From 43b769624eb5e7d0d69a04c20956e9096d9bca4b Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 26 Jan 2025 12:23:03 +0200 Subject: [PATCH] Simplify Loader initialization with a constexpr if --- Build | 2 +- source/geometry/loader.h | 61 +++++++++++----------------------------- 2 files changed, 18 insertions(+), 45 deletions(-) diff --git a/Build b/Build index c1c5d2e..cbb0b75 100644 --- a/Build +++ b/Build @@ -6,7 +6,7 @@ package "mspmath" build_info { - standard CXX "c++14"; + standard CXX "c++17"; }; if_arch "linux" diff --git a/source/geometry/loader.h b/source/geometry/loader.h index bcb5a90..14a2fb8 100644 --- a/source/geometry/loader.h +++ b/source/geometry/loader.h @@ -17,15 +17,16 @@ namespace Msp { namespace Geometry { template -class DimensionIndependentLoader: public DataFile::Loader +class Loader: public DataFile::Loader { protected: bool single = true; std::vector>> shapes; - DimensionIndependentLoader(bool = true); - + Loader(bool); public: + Loader(): Loader(true) { } + std::unique_ptr> take_shape(); protected: @@ -34,24 +35,6 @@ protected: }; -template1)> -class Loader; - -template -class Loader: public DimensionIndependentLoader -{ -public: - Loader(bool = true); -}; - -template -class Loader: public DimensionIndependentLoader -{ -public: - Loader(bool = true); -}; - - template class ShapeLoader; @@ -179,20 +162,23 @@ class ShapeLoader >: public CompositeLoader > template -inline DimensionIndependentLoader::DimensionIndependentLoader(bool s): +inline Loader::Loader(bool s): single(s) { - add("box", &DimensionIndependentLoader::shape >); - add("halfspace", &DimensionIndependentLoader::shape >); - add("intersection", &DimensionIndependentLoader::shape >); - add("negation", &DimensionIndependentLoader::shape >); - add("sphere", &DimensionIndependentLoader::shape >); - add("transformed", &DimensionIndependentLoader::shape >); - add("union", &DimensionIndependentLoader::shape >); + add("box", &Loader::shape>); + add("halfspace", &Loader::shape>); + add("intersection", &Loader::shape>); + add("negation", &Loader::shape>); + add("sphere", &Loader::shape>); + add("transformed", &Loader::shape>); + add("union", &Loader::shape>); + + if constexpr(D>1) + add("extruded", &Loader::template shape>); } template -inline std::unique_ptr> DimensionIndependentLoader::take_shape() +inline std::unique_ptr> Loader::take_shape() { if(shapes.empty()) throw std::runtime_error("no shape"); @@ -201,7 +187,7 @@ inline std::unique_ptr> DimensionIndependentLoader::take_shape template template -inline void DimensionIndependentLoader::shape() +inline void Loader::shape() { if(single && !shapes.empty()) throw std::runtime_error("shape already loaded"); @@ -212,19 +198,6 @@ inline void DimensionIndependentLoader::shape() } -template -inline Loader::Loader(bool s): - DimensionIndependentLoader(s) -{ } - -template -inline Loader::Loader(bool s): - DimensionIndependentLoader(s) -{ - this->add("extruded", &Loader::template shape >); -} - - template inline ShapeLoader >::ShapeLoader(): length_(T(1)) -- 2.45.2