]> git.tdb.fi Git - libs/datafile.git/commitdiff
Remove Collection::ItemLoader
authorMikko Rasa <tdb@tdb.fi>
Wed, 7 Aug 2024 17:59:08 +0000 (20:59 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 7 Aug 2024 17:59:08 +0000 (20:59 +0300)
It can be replaced with if constexpr since we're on C++17 now.

source/collection.h

index 186647b4517e65928691dec1d8d6564b58efe4ee..2d0986ba1e56497aed10e8094e467e448211ce87 100644 (file)
@@ -74,9 +74,6 @@ public:
                void item(const std::string &n) { make_sub<T>().into(dynamic_cast<typename CollectionType<typename T::Loader>::Type &>(coll), n).load(); }
        };
 
-       template<typename T, bool = NeedsCollection<typename T::Loader>::value>
-       class ItemLoader;
-
 private:
        using ItemMap = std::map<std::string, Variant>;
 
@@ -294,24 +291,6 @@ protected:
        Collection *get_fallback() const { return fallback; }
 };
 
-template<typename T>
-class Collection::ItemLoader<T, false>: public T::Loader
-{
-public:
-       ItemLoader(T &o, Collection &):
-               T::Loader(o)
-       { }
-};
-
-template<typename T>
-class Collection::ItemLoader<T, true>: public T::Loader
-{
-public:
-       ItemLoader(T &o, Collection &c):
-               T::Loader(o, dynamic_cast<typename T::Loader::Collection &>(c))
-       { }
-};
-
 
 class MSPDATAFILE_API CollectionItemTypeBase
 {
@@ -479,8 +458,12 @@ public:
        void load_item(Collection &coll, Parser &parser, const std::string &name) const override
        {
                std::unique_ptr<T> obj = std::make_unique<T>();
-               Collection::ItemLoader<T> ldr(*obj, coll);
-               ldr.load(parser);
+               std::optional<typename T::Loader> ldr;
+               if constexpr(NeedsCollection<typename T::Loader>::value)
+                       ldr.emplace(*obj, dynamic_cast<typename CollectionType<typename T::Loader>::Type &>(coll));
+               else
+                       ldr.emplace(*obj);
+               ldr->load(parser);
                coll.add(name, std::move(obj));
        }
 };