]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/collection.h
Use negative integers for built-in statements for better extensibility
[libs/datafile.git] / source / collection.h
index 8b4eba01b0fb5b83f4a1fdc936d6d327ba4bc971..b2239905edb4d824cd14e1d763ff62d234672032 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;
@@ -58,7 +58,7 @@ public:
                template<typename T, typename S, typename C>
                void coll_item(const std::string &n)
                {
-                       RefPtr<T> it=new T;
+                       RefPtr<T> it = new T;
                        load_sub(*it, dynamic_cast<C &>(coll));
                        coll.add<S>(n, it.get());
                        it.release();
@@ -67,13 +67,11 @@ public:
                template<typename T, typename S>
                void item(const std::string &n)
                {
-                       RefPtr<T> it=new T;
+                       RefPtr<T> it = new T;
                        load_sub(*it);
                        coll.add<S>(n, it.get());
                        it.release();
                }
-
-               template<typename, typename, bool> friend class ItemKeyword;
        };
 
 private:
@@ -341,7 +339,8 @@ public:
                if(!creat)
                        throw std::runtime_error("no creator");
                T *obj = creat->create(coll, name);
-               store->store(coll, name, obj);
+               if(obj)
+                       store->store(coll, name, obj);
        }
 };