MyraMath
ExpressionBase.h
Go to the documentation of this file.
1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
6 #ifndef MYRAMATH_EXPRESSION_EXPRESSIONBASE_H
7 #define MYRAMATH_EXPRESSION_EXPRESSIONBASE_H
8 
14 #include <myramath/MYRAMATH_EXPORT.h>
16 
18 
19 namespace myra {
20 
21 // Forward declarations.
22 template<int Arity, class Number> class Expression;
23 
24 namespace detail {
25 
26 // Implementation detail. Base class for all Expression's.
27 template<int Arity, class Number> class MYRAMATH_EXPORT ExpressionBase
28  {
29  protected:
30 
32  virtual Index<Arity> size() const = 0;
33 
35  virtual Number evaluate(Index<Arity> i) const = 0;
36 
37  // Virtual destructor, so subtypes can release resources.
38  virtual ~ExpressionBase();
39 
40  // Virtual copy constructor.
41  virtual ExpressionBase<Arity,Number>* clone() const = 0;
42 
43  // Friendship for encapsulating Expression, so it can clone()/copy.
44  friend class ::myra::Expression<Arity,Number>;
45 
46  };
47 
48 // Default constructed value of an Expression, does nothing.
49 template<int Arity, class Number> class NullExpression : public ExpressionBase<Arity,Number>
50  {
51  public:
52 
53  // Default constructor.
55  { }
56 
57  protected:
58 
59  // Size inspector.
60  virtual Index<Arity> size() const
61  { return Index<Arity>(); }
62 
63  // Given an Index i, returns a Number.
64  virtual Number evaluate(Index<Arity> i) const
65  { return Number(0); }
66 
67  // Virtual copy constructor.
68  virtual ExpressionBase<Arity,Number>* clone() const
69  { return new NullExpression<Arity,Number>(); }
70 
71  };
72 
73 } // namespace detail
74 
75 } // namespace
76 
77 #endif
Implementation detail of Expression templates.
Definition: ExpressionBase.h:49
Definition: Expression.h:25
Definition: syntax.dox:1
Definition: random.cpp:45
Various utility functions/classes related to scalar Number types.
virtual Number evaluate(Index< Arity > i) const
Given an Index i, returns a Number.
Definition: ExpressionBase.h:64
virtual Index< Arity > size() const
Size inspector.
Definition: ExpressionBase.h:60