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
43
44
45
46
47
48
49
50
51
// ============================================================================
// == ==
// == AMDiS - Adaptive multidimensional simulations ==
// == ==
// ============================================================================
// == ==
// == crystal growth group ==
// == ==
// == Stiftung caesar ==
// == Ludwig-Erhard-Allee 2 ==
// == 53175 Bonn ==
// == germany ==
// == ==
// ============================================================================
// == ==
// == http://www.caesar.de/cg/AMDiS ==
// == ==
// ============================================================================
/** \file AbstractFunction.h */
#ifndef AMDIS_ABSTRACTFUNCTION_H
#define AMDIS_ABSTRACTFUNCTION_H
#include "Global.h"
#include "MemoryManager.h"
namespace AMDiS {
// ============================================================================
// ===== class AbstractFunction ===============================================
// ============================================================================
/**
* \ingroup Common
*
* \brief
* An AbstractFunction object represents a function
* f : ArgumentType -> ReturnType.
*
* AbstractFunction is a pure virtual class interface class.
* To create your own function you have to derive AbstractFunction and
* overload operator().
*/
template<typename ReturnType, typename ArgumentType>
class AbstractFunction
{
public:
/** \brief
* Constructor.
*/
AbstractFunction(int degree = 0) :
degree_(degree)
{};
virtual ~AbstractFunction() {};
/** \brief
* Returns \ref degree_.
*/
inline int getDegree() const {
return degree_;
};
/** \brief
* Deligates the evaluation to overriden method f.
*/
virtual ReturnType operator()(const ArgumentType& x) const = 0;
protected:
int degree_;
};
// ============================================================================
// ===== class BinaryAbstractFunction =========================================
// ============================================================================
/**
* \ingroup Common
*
* \brief
* Interface for binary functions.
*/
template<typename ReturnType,
typename ArgumentType1,
typename ArgumentType2>
class BinaryAbstractFunction
{
public:
/** \brief
* Constructor.
*/
BinaryAbstractFunction(int degree = 0) :
degree_(degree)
{};
virtual ~BinaryAbstractFunction() {};
/** \brief
* Returns \ref degree_.
*/

Thomas Witkowski
committed
inline int getDegree() const {
return degree_;
};
/** \brief
* Deligates the evaluation to overriden method f.
*/
virtual ReturnType operator()(const ArgumentType1& x,
const ArgumentType2& y) const = 0;
protected:
int degree_;
};
// ============================================================================
// ===== class TertiaryAbstractFunction =======================================
// ============================================================================
/**
* \ingroup Common
*
* \brief
* Interface for tertiary functions.
*/
template<typename ReturnType,
typename ArgumentType1,
typename ArgumentType2,
typename ArgumentType3>
class TertiaryAbstractFunction
{
public:
/** \brief
* Constructor.
*/
TertiaryAbstractFunction(int degree = 0) :
degree_(degree)
{};
virtual ~TertiaryAbstractFunction() {};
/** \brief
* Returns \ref degree_.
*/

Thomas Witkowski
committed
inline int getDegree() const {
return degree_;
};
/** \brief
* function evaluation.
*/
virtual ReturnType operator()(const ArgumentType1& x,
const ArgumentType2& y,
const ArgumentType3& z) const = 0;
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
protected:
int degree_;
};
// ============================================================================
// ===== class QuartAbstractFunction =======================================
// ============================================================================
/**
* \ingroup Common
*
* \brief
* Interface for quart functions.
*/
template<typename ReturnType,
typename ArgumentType1,
typename ArgumentType2,
typename ArgumentType3,
typename ArgumentType4>
class QuartAbstractFunction
{
public:
/** \brief
* Constructor.
*/
QuartAbstractFunction(int degree = 0) :
degree_(degree)
{};
virtual ~QuartAbstractFunction() {};
/** \brief
* Returns \ref degree_.
*/

Thomas Witkowski
committed
inline int getDegree() const {
return degree_;
};
/** \brief
* function evaluation.
*/
virtual ReturnType operator()(const ArgumentType1& x,
const ArgumentType2& y,
const ArgumentType3& z,
const ArgumentType4& u) const = 0;