source: src/base/factory.hpp@ facba0

Last change on this file since facba0 was dfed1c, checked in by Julian Iseringhausen <isering@…>, 14 years ago

Major vmg update.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@1136 5161e1c8-67bf-11de-9fd5-51895aff932f

  • Property mode set to 100644
File size: 1.7 KB
Line 
1/**
2 * @file factory.hpp
3 * @author Julian Iseringhausen <isering@ins.uni-bonn.de>
4 * @date Tue Apr 5 20:40:41 2011
5 *
6 * @brief Factory class that holds commands and arbitrary objects.
7 *
8 *
9 */
10
11#ifndef FACTORY_HPP_
12#define FACTORY_HPP_
13
14#include <map>
15#include <string>
16
17#include "base/object.hpp"
18
19namespace VMG
20{
21
22class Factory
23{
24public:
25 Factory();
26 virtual ~Factory();
27
28 void Register(Object* object); ///< Registers an object
29 template <class T> T& RegisterObjectStorage(std::string id, const T& val);
30 template <class T> T* RegisterObjectStorageArray(std::string id, const vmg_int& size);
31
32 Object* Get(std::string id); ///< Returns an object.
33 template <class T> T& GetObjectStorageVal(std::string id);
34 template <class T> T* GetObjectStorageArray(std::string id);
35
36 void Delete(std::string id); ///< Deletes an object
37
38 void PrintAvailableObjects(); ///< Prints the name of all objects that have been registered to the factory.
39
40private:
41 std::map<std::string, Object*> object_map;
42};
43
44template <class T>
45T& Factory::RegisterObjectStorage(std::string id, const T& val)
46{
47 Object* object = new ObjectStorage<T>(id, val);
48 return object->Cast< ObjectStorage<T> >()->Val();
49}
50
51template <class T>
52T* Factory::RegisterObjectStorageArray(std::string id, const vmg_int& size)
53{
54 Object* object = new ObjectStorageArray<T>(id, size);
55 return object->Cast< ObjectStorage<T*> >()->Val();
56}
57
58template <class T>
59T& Factory::GetObjectStorageVal(std::string id)
60{
61 return Get(id)->Cast< ObjectStorage<T> >()->Val();
62}
63
64template <class T>
65T* Factory::GetObjectStorageArray(std::string id)
66{
67 return Get(id)->Cast< ObjectStorage<T*> >()->Val();
68}
69
70}
71
72#endif /* FACTORY_HPP_ */
Note: See TracBrowser for help on using the repository browser.