Loading...
Searching...
No Matches
FuncExpression.h
Go to the documentation of this file.
//# FuncExpression.h: An expression executable as function
//# Copyright (C) 2001,2002
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef SCIMATH_FUNCEXPRESSION_H
#define SCIMATH_FUNCEXPRESSION_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/BasicSL/String.h>
#include <casacore/scimath/Functionals/FuncExprData.h>
#include <casacore/casa/stdvector.h>
#include <casacore/casa/Arrays/ArrayFwd.h>
//# Forward Declarations
#include <casacore/casa/iosfwd.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
class MUString;
// <summary> An expression executable as function
// </summary>
// <use visibility=export>
// <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
// </reviewed>
// <prerequisite>
// <li> <linkto class=Function>Function</linkto> class
// </prerequisite>
//
// <synopsis>
// This class acts as an interface between a program given as a string (e.g.
// from a command line interface) and a
// <linkto class=Function>Function</linkto> class. The grammar of the language
// use to express the function is given below. The <src>FuncEXpression</src>
// can be used in all places where Functions can be used (like in the
// linear and non-linear <linkto module=Fitting>Fitting</linkto> classes.
//
// An expression is created by either supplying a <src>String</src> to a
// constructor, or be setting a <src>String</src>.
// </synopsis>
//
// <example>
// </example>
//
// <motivation>
// To tie the Glish language to non-linear fitting procedures
// </motivation>
//
// <thrown>
// <li> AipsError if an illegal program passed in constructor
// </thrown>
//
// <todo asof="2001/11/21">
// <li> nothing directly
// </todo>
class FuncExpression {
public:
//# Enumerations
//# Constructors
// Construct an empty executable expression
FuncExpression();
// Construct an executable expression from the given string
explicit FuncExpression(const String &prog);
// Make this object a (deep) copy of other.
FuncExpression(const FuncExpression &other);
// Make this object a (deep) copy of other.
FuncExpression &operator=(const FuncExpression &other);
// Destructor
~FuncExpression() {}
//# Member functions
// Create an executable program
Bool create(const String &prog);
// Get the current error message
const String &errorMessage() { return error_p; }
// Get the executable program
const vector<FuncExprData::ExprOperator> &getCode() const;
// Get the number of parameters in executable program
uInt getNpar() const { return npar_p; }
// Get the number of dimensions of executable program
uInt getNdim() const {return ndim_p; }
// Get reference to the compiled program
const vector<FuncExprData::ExprOperator> &getCode() { return code_p; }
// Get reference to compiled constants
const vector<Double> &getConst() { return const_p; }
// Execute the program
Bool exec(Double &res) const;
// Print the stack information (mainly for debugging)
void print(ostream &os) const;
private:
//# Data
// The expression data /// later into a singleton
FuncExprData exd;
// The latest error message
mutable String error_p;
// The executable code stack (a vector, since it is a re-usable stack)
vector<FuncExprData::ExprOperator> code_p;
// The reverse Polish work stack (a vector, since deque did not work on gcc)
vector<FuncExprData::ExprOperator> rps_p;
// The current state of the compilation
FuncExprData::ExprCompState state_p;
// The current constant stack
vector<Double> const_p;
// The number of parameters in code
uInt npar_p;
// The number of dimensions of expression
uInt ndim_p;
// Executing stack
mutable vector<Double> exec_p;
//# Member functions
// Compile a statement (in prg, which will be adjusted)
Bool compStmt(MUString &prg);
// Compile an expression (in prg, which will be adjusted)
Bool compExpr(MUString &prg);
// Compile a term (in prg, which will be adjusted)
Bool compTerm(MUString &prg);
// Save an operation on compilation RP stack.
Bool setOp(FuncExprData::ExprOperator &oper);
// Save a value on constant stack.
Bool setVal(const Double &val);
// Save an executable code
Bool setCode(const FuncExprData::ExprOperator &oper);
// Initialise the state
void initState();
};
//# Global Functions
// <summary> Output function </summary>
// <group name=output>
// Show the program
ostream &operator<<(ostream &os, const FuncExpression &ed);
// </group>
// <summary> Execute function </summary>
// <group name=execute>
// Execute the program
template <class T>
T FuncExecute(const Vector<T> &x, const Vector<T> &par);
// </group>
} //# NAMESPACE CASACORE - END
#endif
casacore::FuncExprData
Definition FuncExprData.h:71
casacore::FuncExpression
Definition FuncExpression.h:81
casacore::FuncExpression::setVal
Bool setVal(const Double &val)
Save a value on constant stack.
casacore::FuncExpression::state_p
FuncExprData::ExprCompState state_p
The current state of the compilation.
Definition FuncExpression.h:129
casacore::FuncExpression::getCode
const vector< FuncExprData::ExprOperator > & getCode() const
Get the executable program.
casacore::FuncExpression::FuncExpression
FuncExpression()
Construct an empty executable expression.
casacore::FuncExpression::compTerm
Bool compTerm(MUString &prg)
Compile a term (in prg, which will be adjusted).
casacore::FuncExpression::ndim_p
uInt ndim_p
The number of dimensions of expression.
Definition FuncExpression.h:135
casacore::FuncExpression::getConst
const vector< Double > & getConst()
Get reference to compiled constants.
Definition FuncExpression.h:112
casacore::FuncExpression::FuncExpression
FuncExpression(const FuncExpression &other)
Make this object a (deep) copy of other.
casacore::FuncExpression::exd
FuncExprData exd
The expression data /// later into a singleton.
Definition FuncExpression.h:121
casacore::FuncExpression::rps_p
vector< FuncExprData::ExprOperator > rps_p
The reverse Polish work stack (a vector, since deque did not work on gcc).
Definition FuncExpression.h:127
casacore::FuncExpression::initState
void initState()
Initialise the state.
casacore::FuncExpression::npar_p
uInt npar_p
The number of parameters in code.
Definition FuncExpression.h:133
casacore::FuncExpression::exec
Bool exec(Double &res) const
Execute the program.
casacore::FuncExpression::getCode
const vector< FuncExprData::ExprOperator > & getCode()
Get reference to the compiled program.
Definition FuncExpression.h:110
casacore::FuncExpression::errorMessage
const String & errorMessage()
Get the current error message.
Definition FuncExpression.h:102
casacore::FuncExpression::setOp
Bool setOp(FuncExprData::ExprOperator &oper)
Save an operation on compilation RP stack.
casacore::FuncExpression::print
void print(ostream &os) const
Print the stack information (mainly for debugging).
casacore::FuncExpression::~FuncExpression
~FuncExpression()
Destructor.
Definition FuncExpression.h:96
casacore::FuncExpression::operator=
FuncExpression & operator=(const FuncExpression &other)
Make this object a (deep) copy of other.
casacore::FuncExpression::create
Bool create(const String &prog)
Create an executable program.
casacore::FuncExpression::FuncExpression
FuncExpression(const String &prog)
Construct an executable expression from the given string.
casacore::FuncExpression::getNdim
uInt getNdim() const
Get the number of dimensions of executable program.
Definition FuncExpression.h:108
casacore::FuncExpression::getNpar
uInt getNpar() const
Get the number of parameters in executable program.
Definition FuncExpression.h:106
casacore::FuncExpression::compStmt
Bool compStmt(MUString &prg)
Compile a statement (in prg, which will be adjusted).
casacore::FuncExpression::const_p
vector< Double > const_p
The current constant stack.
Definition FuncExpression.h:131
casacore::FuncExpression::setCode
Bool setCode(const FuncExprData::ExprOperator &oper)
Save an executable code.
casacore::FuncExpression::error_p
String error_p
The latest error message.
Definition FuncExpression.h:123
casacore::FuncExpression::exec_p
vector< Double > exec_p
Executing stack.
Definition FuncExpression.h:137
casacore::FuncExpression::code_p
vector< FuncExprData::ExprOperator > code_p
The executable code stack (a vector, since it is a re-usable stack).
Definition FuncExpression.h:125
casacore::FuncExpression::compExpr
Bool compExpr(MUString &prg)
Compile an expression (in prg, which will be adjusted).
casacore::MUString
Definition MUString.h:228
casacore::String
String: the storage and methods of handling collections of characters.
Definition String.h:223
casacore::Vector
Definition Vector.h:82
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::operator<<
ostream & operator<<(ostream &os, const IComplex &)
Show on ostream.
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
casacore::Double
double Double
Definition aipstype.h:53
casacore::FuncExprData::ExprCompState
The compilation state descriptor.
Definition FuncExprData.h:170
casacore::FuncExprData::ExprOperator
The operator description: code; priority; # of arguments; # of arguments used up (or produced for fun...
Definition FuncExprData.h:182
casacore::FuncExpression_global_functions_execute
Execute function .
Definition FuncExpression.h:168
casacore::FuncExpression_global_functions_execute::FuncExecute
T FuncExecute(const Vector< T > &x, const Vector< T > &par)
Execute the program.
casacore::FuncExpression_global_functions_output
Output function .
Definition FuncExpression.h:161
casacore::FuncExpression_global_functions_output::operator<<
ostream & operator<<(ostream &os, const FuncExpression &ed)
Show the program.