]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/dynamicobjectloader.h
Use nullptr instead of 0 for pointers
[libs/datafile.git] / source / dynamicobjectloader.h
index b5830b8c9512a9a95840a6bf57c08f87f25b62ba..ee1827bbd067f10e32123bde3e484743e64d0495 100644 (file)
@@ -31,8 +31,8 @@ protected:
        typedef Msp::TypeRegistry<CreateObject, DynamicObjectLoader &> TypeRegistry;
 
        Collection *coll;
-private:
        T *object;
+private:
        Loader *obj_loader;
        std::function<void(Collection &, const std::string &, T *)> store_func;
 
@@ -48,11 +48,12 @@ private:
 
 public:
        T *get_object() { T *o = object; object = 0; return o; }
-       void store_object(Collection &, const std::string &);
+       T *store_object(Collection &, const std::string &);
 
-private:
-       void type(const Symbol &);
+protected:
+       virtual void type(const Symbol &);
 
+private:
        template<typename U>
        typename std::enable_if<NeedsCollection<typename U::Loader>::value, typename U::Loader *>::type create_object_loader(U &obj) const;
 
@@ -70,8 +71,8 @@ Loader::ActionMap DynamicObjectLoader<T, C>::shared_actions;
 template<typename T, typename C>
 DynamicObjectLoader<T, C>::DynamicObjectLoader(Collection *c):
        coll(c),
-       object(0),
-       obj_loader(0)
+       object(nullptr),
+       obj_loader(nullptr)
 {
        set_actions(shared_actions);
 }
@@ -83,13 +84,15 @@ void DynamicObjectLoader<T, C>::init_actions()
 }
 
 template<typename T, typename C>
-void DynamicObjectLoader<T, C>::store_object(Collection &c, const std::string &name)
+T *DynamicObjectLoader<T, C>::store_object(Collection &c, const std::string &name)
 {
        if(!store_func)
                throw std::logic_error("no store function");
 
+       T *o = object;
        store_func(c, name, object);
        object = 0;
+       return o;
 }
 
 template<typename T, typename C>
@@ -126,7 +129,7 @@ void DynamicObjectLoader<T, C>::CreateObject<U>::operator()(const std::string &,
        ldr.object = obj;
        ldr.obj_loader = ldr.create_object_loader<U>(*obj);
        ldr.add_auxiliary_loader(*ldr.obj_loader);
-       ldr.store_func = [&ldr](Collection &c, const std::string &n, T *o){ c.add(n, static_cast<U *>(o)); };
+       ldr.store_func = [](Collection &c, const std::string &n, T *o){ c.add(n, static_cast<U *>(o)); };
 }
 
 } // namespace DataFile