]> git.tdb.fi Git - libs/datafile.git/commitdiff
Create improvement replacements for BasicLoader* in objectloader.h
authorMikko Rasa <tdb@tdb.fi>
Thu, 4 Feb 2010 17:58:31 +0000 (17:58 +0000)
committerMikko Rasa <tdb@tdb.fi>
Thu, 4 Feb 2010 17:58:31 +0000 (17:58 +0000)
Mark the old ones as deprecated

source/loader.h
source/objectloader.h [new file with mode: 0644]

index 5c8726a179683c841e6439e57fd3cfa4772394e2..6f7e61464db509bf50e5c62fe26d851018f5d342 100644 (file)
@@ -156,8 +156,7 @@ protected:
 
 
 /**
-Provides the basic functionality of an object loader.  Deriving from this
-allows loading values directly into member variables of the objects.
+Deprecated.  See ObjectLoader in objectloader.h.
 */
 template<typename O>
 class BasicLoader: public Loader
@@ -175,8 +174,7 @@ public:
 
 
 /**
-Provides functionality for loading objects with a Collection.  Deriving from
-this allows loading pointers to objects in the collection automatically.
+Deprecated.  See CollectionObjectLoader in objectloader.h.
 */
 template<typename O, typename C>
 class BasicLoader2: public BasicLoader<O>
diff --git a/source/objectloader.h b/source/objectloader.h
new file mode 100644 (file)
index 0000000..515ea6b
--- /dev/null
@@ -0,0 +1,65 @@
+/* $Id$
+
+This file is part of libmspdatafile
+Copyright © 2010  Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#ifndef MSP_DATAFILE_OBJECTLOADER_H_
+#define MSP_DATAFILE_OBJECTLOADER_H_
+
+#include "loader.h"
+
+namespace Msp {
+namespace DataFile {
+
+class Collection;
+
+/**
+Provides the basic functionality of an object loader.  Deriving from this
+allows loading values directly into member variables of the objects.
+*/
+template<typename O>
+class ObjectLoader: public Loader
+{
+public:
+       typedef O Object;
+
+protected:
+       O &obj;
+
+       ObjectLoader(O &o): obj(o) { }
+
+public:
+       O &get_object() const { return obj; }
+};
+
+
+/**
+Provides functionality for loading objects with a Collection.  Deriving from
+this allows loading pointers to objects in the collection automatically.
+*/
+template<typename O, typename C = Collection>
+class CollectionObjectLoader: public ObjectLoader<O>
+{
+public:
+       typedef C Collection;
+
+protected:
+       C *coll;
+
+       CollectionObjectLoader(O &o, C *c): ObjectLoader<O>(o), coll(c) { }
+
+public:
+       C &get_collection() const
+       {
+               if(!coll)
+                       throw InvalidState("No collection");
+               return *coll;
+       }
+};
+
+} // namespace DataFile
+} // namespace Msp
+
+#endif