OpendTect  6.6
mathexpression.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Kristofer Tingdahl
8  Date: 10-12-1999
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "generalmod.h"
15 #include "bufstringset.h"
16 
17 
18 namespace Math
19 {
20 
32 {
33 public:
34 
35  virtual double getValue() const = 0;
36 
37  virtual int nrVariables() const;
38  virtual const char* fullVariableExpression(int) const;
39  virtual void setVariableValue(int,double);
40 
41  // recursive "out" or "this" excluded
42  int nrUniqueVarNames() const
43  { return varnms_.size(); }
44  const char* uniqueVarName( int idx ) const
45  { return varnms_.get(idx).buf(); }
46  int indexOfUnVarName( const char* nm ) const
47  { return varnms_.indexOf( nm ); }
48  int firstOccurVarName(const char*) const;
49 
50  enum VarType { Variable, Constant, Recursive };
51  VarType getType(int varidx) const;
52  int getConstIdx(int varidx) const;
53 
54  bool isRecursive() const
55  { return isrecursive_; }
56 
57  virtual Expression* clone() const = 0;
58 
59  virtual ~Expression();
60 
61  const char* type() const;
62  void dump( BufferString& str ) const { doDump(str,0); }
63 
64 protected:
65 
66  Expression(int nrinputs);
67 
68  int nrInputs() const { return inputs_.size(); }
69  bool setInput( int, Expression* );
70  void copyInput( Expression* target ) const;
71 
72  void addIfOK(const char*);
73 
79 
80  friend class ExpressionParser;
81 
82  void doDump(BufferString&,int nrtabs) const;
83  virtual void dumpSpecifics(BufferString&,int nrtabs) const {}
84 
85 };
86 
87 
109 {
110 public:
111 
112  ExpressionParser( const char* str=0,
113  bool inputsareseries=true )
114  : inp_(str), abswarn_(false)
115  , inputsareseries_(inputsareseries) {}
116 
117  void setInput( const char* s ) { inp_ = s; }
118  Expression* parse() const;
119 
120  static BufferString varNameOf(const char* fullvarnm,int* shift=0);
121  static Expression::VarType varTypeOf(const char*);
122  static int constIdxOf(const char*);
123 
124  const char* errMsg() const { return errmsg_; }
125  bool foundOldAbs() const { return abswarn_; }
126 
127 protected:
128 
130  const bool inputsareseries_;
132  mutable bool abswarn_;
133 
134  Expression* parse(const char*) const;
135 
136  bool findOuterParens(char*,int,Expression*&) const;
137  bool findOuterAbs(char*,int,Expression*&) const;
138  bool findQMarkOper(char*,int,Expression*&) const;
139  bool findAndOrOr(char*,int,Expression*&) const;
140  bool findInequality(char*,int,Expression*&) const;
141  bool findPlusAndMinus(char*,int,Expression*&) const;
143  bool findVariable(char*,int,Expression*&) const;
145  Expression*&) const;
147  Expression*&) const;
148 
149 };
150 
151 
157 {
158 public:
159  ExpressionOperatorDesc( const char* s,
160  const char* d, bool isop, int n )
161  : symbol_(s), desc_(d)
162  , isoperator_(isop), nrargs_(n) {}
163 
164  const char* symbol_; // can have spaces, e.g. "? :"
165  const char* desc_;
166  bool isoperator_;
167  int nrargs_;
168 };
169 
170 
176 {
177 public:
178 
181 
183 
184 };
185 
186 } // namespace Math
Math::Expression::firstOccurVarName
int firstOccurVarName(const char *) const
Math::Expression::dump
void dump(BufferString &str) const
Definition: mathexpression.h:62
Math::ExpressionParser::parse
Expression * parse() const
Math::Expression::getValue
virtual double getValue() const =0
Math::Expression
Parsed Math expression.
Definition: mathexpression.h:32
Math::ExpressionOperatorDescGroup
Group of similar expression descs.
Definition: mathexpression.h:176
Math::ExpressionParser::findInequality
bool findInequality(char *, int, Expression *&) const
Math::ExpressionOperatorDesc::nrargs_
int nrargs_
2 for normal operators
Definition: mathexpression.h:167
Math::ExpressionOperatorDesc::desc_
const char * desc_
Definition: mathexpression.h:165
Math::ExpressionParser
Parses a string with a mathematical expression.
Definition: mathexpression.h:109
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
Math::ExpressionParser::findVariable
bool findVariable(char *, int, Expression *&) const
BufferStringSet
Set of BufferString objects.
Definition: bufstringset.h:26
Math::Expression::variablenr_
ObjectSet< TypeSet< int > > variablenr_
Definition: mathexpression.h:75
Math::Expression::VarType
VarType
Definition: mathexpression.h:50
Math::Expression::nrVariables
virtual int nrVariables() const
Math::ExpressionParser::varTypeOf
static Expression::VarType varTypeOf(const char *)
Math::Expression::isrecursive_
bool isrecursive_
Definition: mathexpression.h:78
Math::ExpressionOperatorDesc::isoperator_
bool isoperator_
if not, function
Definition: mathexpression.h:166
Math::ExpressionParser::findAndOrOr
bool findAndOrOr(char *, int, Expression *&) const
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Math::ExpressionParser::varNameOf
static BufferString varNameOf(const char *fullvarnm, int *shift=0)
Math::Expression::doDump
void doDump(BufferString &, int nrtabs) const
Math::Expression::isRecursive
bool isRecursive() const
Definition: mathexpression.h:54
Math::ExpressionParser::findQMarkOper
bool findQMarkOper(char *, int, Expression *&) const
Math::ExpressionParser::findOuterAbs
bool findOuterAbs(char *, int, Expression *&) const
Math::ExpressionParser::ExpressionParser
ExpressionParser(const char *str=0, bool inputsareseries=true)
Definition: mathexpression.h:112
Math::Expression::inputs_
ObjectSet< Expression > inputs_
Definition: mathexpression.h:76
Math::ExpressionParser::findOuterParens
bool findOuterParens(char *, int, Expression *&) const
Math::ExpressionOperatorDesc
Expression desc to build UI.
Definition: mathexpression.h:157
Math::Expression::nrUniqueVarNames
int nrUniqueVarNames() const
Definition: mathexpression.h:42
Math::ExpressionParser::errmsg_
BufferString errmsg_
Definition: mathexpression.h:131
Math::ExpressionParser::findPlusAndMinus
bool findPlusAndMinus(char *, int, Expression *&) const
Math::Expression::type
const char * type() const
Math::ExpressionParser::foundOldAbs
bool foundOldAbs() const
Definition: mathexpression.h:125
Math::ExpressionOperatorDescGroup::name_
BufferString name_
Definition: mathexpression.h:179
Math::ExpressionParser::abswarn_
bool abswarn_
Definition: mathexpression.h:132
Math::Expression::variableobj_
ObjectSet< TypeSet< int > > variableobj_
Definition: mathexpression.h:74
Math::ExpressionParser::constIdxOf
static int constIdxOf(const char *)
Math::Expression::~Expression
virtual ~Expression()
Math::ExpressionParser::inp_
BufferString inp_
Definition: mathexpression.h:129
Math::ExpressionParser::findMathFunction
bool findMathFunction(BufferString &, int, Expression *&) const
Math::Expression::setVariableValue
virtual void setVariableValue(int, double)
Math::Expression::copyInput
void copyInput(Expression *target) const
Math::ExpressionParser::errMsg
const char * errMsg() const
Definition: mathexpression.h:124
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
Math::Expression::Expression
Expression(int nrinputs)
Math::ExpressionOperatorDesc::ExpressionOperatorDesc
ExpressionOperatorDesc(const char *s, const char *d, bool isop, int n)
Definition: mathexpression.h:159
bufstringset.h
Math::ExpressionParser::findStatsFunction
bool findStatsFunction(BufferString &, int, Expression *&) const
Math::Expression::uniqueVarName
const char * uniqueVarName(int idx) const
Definition: mathexpression.h:44
MPE::errmsg_
BufferString errmsg_
Definition: horizontracker.h:118
Math::Expression::setInput
bool setInput(int, Expression *)
Math::ExpressionParser::parse
Expression * parse(const char *) const
Math::ExpressionOperatorDescGroup::supported
static const ObjectSet< const ExpressionOperatorDescGroup > & supported()
Math::Expression::indexOfUnVarName
int indexOfUnVarName(const char *nm) const
Definition: mathexpression.h:46
Math::Expression::nrInputs
int nrInputs() const
Definition: mathexpression.h:68
Math::Expression::getType
VarType getType(int varidx) const
Math::Expression::varnms_
BufferStringSet varnms_
Definition: mathexpression.h:77
Math::ExpressionOperatorDescGroup::opers_
ObjectSet< ExpressionOperatorDesc > opers_
Definition: mathexpression.h:180
Math::ExpressionParser::setInput
void setInput(const char *s)
Definition: mathexpression.h:117
Math::Expression::getConstIdx
int getConstIdx(int varidx) const
Math::Expression::dumpSpecifics
virtual void dumpSpecifics(BufferString &, int nrtabs) const
Definition: mathexpression.h:83
Math::ExpressionOperatorDesc::symbol_
const char * symbol_
Definition: mathexpression.h:164
Math::ExpressionParser::findOtherOper
bool findOtherOper(BufferString &, int, Expression *&) const
Math::Expression::fullVariableExpression
virtual const char * fullVariableExpression(int) const
Math::Expression::clone
virtual Expression * clone() const =0
Math
Definition: math2.h:29
Math::Expression::addIfOK
void addIfOK(const char *)
Math::ExpressionParser::inputsareseries_
const bool inputsareseries_
Definition: mathexpression.h:130

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021