Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// ============================================================================
// == ==
// == AMDiS - Adaptive multidimensional simulations ==
// == ==
// ============================================================================
// == ==
// == crystal growth group ==
// == ==
// == Stiftung caesar ==
// == Ludwig-Erhard-Allee 2 ==
// == 53175 Bonn ==
// == germany ==
// == ==
// ============================================================================
// == ==
// == http://www.caesar.de/cg/AMDiS ==
// == ==
// ============================================================================
/** \file CreatorInterface.h */
#ifndef AMDIS_CREATORINTERFACE_H
#define AMDIS_CREATORINTERFACE_H
namespace AMDiS {
/** \ingroup Common
* \brief
* Interface for the implementation of the factory method pattern.
* The creation of an object of a sub class of BaseClass is deligated
* to a corresponding sub class of Creator<BaseClass>. So it is possible to
* manage a CreatorMap, which can be extended at run-time. An example is
* the OEMSolverMap: If you write your own OEMSolver sub class and a
* corresponding Creator<OEMSolver<T> >, you can add the creator together
* with a key string to the OEMSolverMap. Then you can create an OEMSolver
* depending of a key string read from the init file, which can also be
* your own new solver.
*/
template<typename BaseClass>
class CreatorInterface
{
public:
virtual ~CreatorInterface() {}
/** \brief
* Must be implemented by sub classes of CreatorInterface.
* Creates a new instance of the sub class of BaseClass.
*/
virtual BaseClass* create() = 0;
/** \brief
* Can be implemented by sub classes.
*/
virtual void free(BaseClass *) {}
/** \brief
*
*/
virtual bool isNullCreator() {
return false;
};
/** \brief
* A Creator which creates no object abd returns NULL instead.
* Used together with the key word 'no' in CreatorMap.
*/
template<typename BaseClass>
class NullCreator : public CreatorInterface<BaseClass>
{
/** \brief
* Creates no object.
*/
BaseClass* create() {
return NULL;
/** \brief
*
*/
virtual bool isNullCreator() {
return true;