AbstractFunction.h 3.68 KB
 Praetorius, Simon committed Aug 02, 2013 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /****************************************************************************** * * AMDiS - Adaptive multidimensional simulations * * Copyright (C) 2013 Dresden University of Technology. All Rights Reserved. * Web: https://fusionforge.zih.tu-dresden.de/projects/amdis * * Authors: * Simon Vey, Thomas Witkowski, Andreas Naumann, Simon Praetorius, et al. * * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * * This file is part of AMDiS * * See also license.opensource.txt in the distribution. * ******************************************************************************/  Thomas Witkowski committed Dec 16, 2010 20 21   Peter Gottschling committed Feb 15, 2008 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  /** \file AbstractFunction.h */ #ifndef AMDIS_ABSTRACTFUNCTION_H #define AMDIS_ABSTRACTFUNCTION_H #include "Global.h" namespace AMDiS { /** * \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 class AbstractFunction { public:  Thomas Witkowski committed May 07, 2009 47  /// Constructor.  Thomas Witkowski committed Sep 26, 2008 48 49  AbstractFunction(int degree = 0) : degree_(degree)  Thomas Witkowski committed Mar 11, 2009 50  {}  Peter Gottschling committed Feb 15, 2008 51   Thomas Witkowski committed Mar 11, 2009 52  virtual ~AbstractFunction() {}  Peter Gottschling committed Feb 15, 2008 53   Thomas Witkowski committed May 07, 2009 54  /// Returns \ref degree_.  Thomas Witkowski committed Jun 10, 2009 55 56  inline int getDegree() const {  Thomas Witkowski committed Sep 26, 2008 57  return degree_;  Thomas Witkowski committed Mar 11, 2009 58  }  Peter Gottschling committed Feb 15, 2008 59   Thomas Witkowski committed May 07, 2009 60  /// Deligates the evaluation to overriden method f.  Thomas Witkowski committed Sep 26, 2008 61  virtual ReturnType operator()(const ArgumentType& x) const = 0;  Peter Gottschling committed Feb 15, 2008 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78  protected: int degree_; }; /** * \ingroup Common * * \brief * Interface for binary functions. */ template class BinaryAbstractFunction { public:  Thomas Witkowski committed May 07, 2009 79  /// Constructor.  Thomas Witkowski committed Sep 26, 2008 80 81  BinaryAbstractFunction(int degree = 0) : degree_(degree)  Thomas Witkowski committed May 07, 2009 82  {}  Peter Gottschling committed Feb 15, 2008 83   Thomas Witkowski committed May 07, 2009 84  virtual ~BinaryAbstractFunction() {}  Peter Gottschling committed Feb 15, 2008 85   Thomas Witkowski committed May 07, 2009 86  /// Returns \ref degree_.  Thomas Witkowski committed Jun 10, 2009 87 88  inline int getDegree() const {  89  return degree_;  Thomas Witkowski committed May 07, 2009 90  }  Peter Gottschling committed Feb 15, 2008 91   Thomas Witkowski committed May 07, 2009 92  /// Deligates the evaluation to overriden method f.  Thomas Witkowski committed Sep 26, 2008 93 94  virtual ReturnType operator()(const ArgumentType1& x, const ArgumentType2& y) const = 0;  Peter Gottschling committed Feb 15, 2008 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112  protected: int degree_; }; /** * \ingroup Common * * \brief * Interface for tertiary functions. */ template class TertiaryAbstractFunction { public:  Thomas Witkowski committed May 07, 2009 113  /// Constructor.  Thomas Witkowski committed Sep 26, 2008 114 115  TertiaryAbstractFunction(int degree = 0) : degree_(degree)  Thomas Witkowski committed May 07, 2009 116  {}  Peter Gottschling committed Feb 15, 2008 117   Thomas Witkowski committed May 07, 2009 118  virtual ~TertiaryAbstractFunction() {}  Peter Gottschling committed Feb 15, 2008 119   Thomas Witkowski committed May 07, 2009 120  /// Returns \ref degree_.  Thomas Witkowski committed Jun 10, 2009 121 122  inline int getDegree() const {  123  return degree_;  Thomas Witkowski committed May 07, 2009 124  }  Peter Gottschling committed Feb 15, 2008 125   Thomas Witkowski committed May 07, 2009 126  /// function evaluation.  Thomas Witkowski committed Sep 26, 2008 127 128 129  virtual ReturnType operator()(const ArgumentType1& x, const ArgumentType2& y, const ArgumentType3& z) const = 0;  Peter Gottschling committed Feb 15, 2008 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148  protected: int degree_; }; /** * \ingroup Common * * \brief * Interface for quart functions. */ template class QuartAbstractFunction { public:  Thomas Witkowski committed May 07, 2009 149  /// Constructor.  Thomas Witkowski committed Sep 26, 2008 150 151  QuartAbstractFunction(int degree = 0) : degree_(degree)  Thomas Witkowski committed May 07, 2009 152  {}  Peter Gottschling committed Feb 15, 2008 153   Thomas Witkowski committed May 07, 2009 154  virtual ~QuartAbstractFunction() {}  Peter Gottschling committed Feb 15, 2008 155   Thomas Witkowski committed May 07, 2009 156  /// Returns \ref degree_.  Thomas Witkowski committed Jun 10, 2009 157 158  inline int getDegree() const {  159  return degree_;  Thomas Witkowski committed May 07, 2009 160  }  Peter Gottschling committed Feb 15, 2008 161   Thomas Witkowski committed May 07, 2009 162  /// function evaluation.  Thomas Witkowski committed Sep 26, 2008 163 164 165 166  virtual ReturnType operator()(const ArgumentType1& x, const ArgumentType2& y, const ArgumentType3& z, const ArgumentType4& u) const = 0;  Peter Gottschling committed Feb 15, 2008 167 168 169 170 171 172 173 174 175 176 177  protected: int degree_; }; } #endif // AMDIS_ABSTRACTFUNCTION_H