source: src/base/factory.hpp@ dfed1c

Last change on this file since dfed1c 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
RevLine 
[48b662]1/**
2 * @file factory.hpp
3 * @author Julian Iseringhausen <isering@ins.uni-bonn.de>
4 * @date Tue Apr 5 20:40:41 2011
[dfed1c]5 *
[48b662]6 * @brief Factory class that holds commands and arbitrary objects.
[dfed1c]7 *
8 *
[48b662]9 */
10
[dfed1c]11#ifndef FACTORY_HPP_
12#define FACTORY_HPP_
[48b662]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
[dfed1c]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);
[48b662]31
[dfed1c]32 Object* Get(std::string id); ///< Returns an object.
[48b662]33 template <class T> T& GetObjectStorageVal(std::string id);
[dfed1c]34 template <class T> T* GetObjectStorageArray(std::string id);
[48b662]35
[dfed1c]36 void Delete(std::string id); ///< Deletes an object
[48b662]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>
[dfed1c]45T& Factory::RegisterObjectStorage(std::string id, const T& val)
[48b662]46{
[dfed1c]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();
[48b662]56}
57
58template <class T>
59T& Factory::GetObjectStorageVal(std::string id)
60{
[dfed1c]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();
[48b662]68}
69
70}
71
[dfed1c]72#endif /* FACTORY_HPP_ */
Note: See TracBrowser for help on using the repository browser.