]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/collection.h
Fix collection necessity detection
[libs/datafile.git] / source / collection.h
index 82339d8859902f725308b347f9f3de3fd39ff244..021b714a934e05dbb190dd4b2b473f1607b160e6 100644 (file)
@@ -46,7 +46,7 @@ public:
                template<typename T> friend class CollectionItemType;
 
        private:
-               template<typename T, typename S, bool = NeedsCollection<T>::value >
+               template<typename T, typename S, bool = NeedsCollection<typename T::Loader>::value>
                struct Add;
 
                Collection &coll;
@@ -292,17 +292,17 @@ private:
                { Collection::Loader::Add<T, S>::add(loader, kwd); }
        };
 
-       CreatorBase *creator;
+       CreatorBase *creat;
        StoreBase *store;
 
 public:
        CollectionItemType():
-               creator(0), store(new Store<T>)
+               creat(0), store(new Store<T>)
        { tag = new Tag<T>; }
 
        ~CollectionItemType()
        {
-               delete creator;
+               delete creat;
                delete store;
        }
 
@@ -313,10 +313,10 @@ public:
        }
 
        template<typename C>
-       CollectionItemType &create(T *(C::*func)(const std::string &))
+       CollectionItemType &creator(T *(C::*func)(const std::string &))
        {
-               delete creator;
-               creator = new Creator<C>(func);
+               delete creat;
+               creat = new Creator<C>(func);
                return *this;
        }
 
@@ -334,13 +334,13 @@ public:
        { store->add_to_loader(loader, kwd); }
 
        virtual bool can_create() const
-       { return creator!=0; }
+       { return creat!=0; }
 
        virtual void create_item(Collection &coll, const std::string &name) const
        {
-               if(!creator)
+               if(!creat)
                        throw std::runtime_error("no creator");
-               T *obj = creator->create(coll, name);
+               T *obj = creat->create(coll, name);
                store->store(coll, name, obj);
        }
 };