26#include "ExprConfig.h"
64 virtual void eval(
double* result) = 0;
65 virtual void eval(
const char** resultStr) = 0;
101 Error(
const std::string& errorIn,
const int startPosIn,
const int endPosIn)
119 void setExpr(
const std::string& e);
155 bool usesVar(
const std::string& name)
const;
159 bool usesFunc(
const std::string& name)
const;
185 void evalMultiple(
VarBlock* varBlock,
int outputVarBlockOffset,
size_t rangeStart,
size_t rangeEnd)
const;
205 void addError(
const std::string& error,
const int startPos,
const int endPos)
const {
294 mutable std::set<std::string>
_vars;
static Context & global()
The global default context of the seexpr.
Function Definition, used in parse tree and func table.
Variable scope builder is used by the type checking and code gen to track visiblity of variables and ...
abstract class for implementing variable references
virtual void eval(double *result)=0
returns this variable's value by setting result
ExprVarRef(const ExprType &type)
virtual ExprType type() const
returns (current) type
virtual void setType(const ExprType &type)
sets (current) type to given type
virtual void eval(const char **resultStr)=0
void addComment(int pos, int length)
void parseIfNeeded() const
bool usesVar(const std::string &name) const
const Context & context() const
void setDesiredReturnType(const ExprType &type)
virtual ExprVarRef * resolveVar(const std::string &name) const
Interpreter * _interpreter
const std::vector< std::string > & getThreadUnsafeFunctionCalls() const
const VarBlockCreator * _varBlockCreator
std::vector< std::pair< int, int > > _comments
const std::vector< std::pair< int, int > > & getComments() const
EvaluationStrategy
Types of evaluation strategies that are available.
std::vector< Error > _errors
const char * evalStr(VarBlock *varBlock=nullptr) const
std::set< std::string > _funcs
EvaluationStrategy _evaluationStrategy
const ExprType & returnType() const
const std::string & getExpr() const
Get the string that this expression is currently set to evaluate.
void setExpr(const std::string &e)
void addError(const std::string &error, const int startPos, const int endPos) const
LLVMEvaluator * _llvmEvaluator
Expression & operator=(const Expression &e)
bool usesFunc(const std::string &name) const
void addFunc(const char *n) const
add function evaluation (this is for internal use)
std::set< std::string > _vars
const VarBlockCreator * varBlockCreator() const
void setVarBlockCreator(const VarBlockCreator *varBlockCreator)
void evalMultiple(VarBlock *varBlock, int outputVarBlockOffset, size_t rangeStart, size_t rangeEnd) const
Evaluate multiple blocks.
virtual ExprFunc * resolveFunc(const std::string &name) const
const double * evalFP(VarBlock *varBlock=nullptr) const
void debugPrintLLVM() const
const std::string & parseError() const
const std::vector< Error > & getErrors() const
Expression(const Expression &e)
void setThreadUnsafe(const std::string &functionName) const
void setContext(const Context &context)
ExprType _desiredReturnType
static EvaluationStrategy defaultEvaluationStrategy
What evaluation strategy to use by default.
void debugPrintInterpreter() const
static bool debugging
Whether to debug expressions.
void prepIfNeeded() const
bool isThreadSafe() const
std::vector< std::string > _threadUnsafeFunctionCalls
void debugPrintParseTree() const
ExprVarEnvBuilder _envBuilder
void addVar(const char *n) const
add local variable (this is for internal use)
A class that lets you register for the variables used by one or more expressions.
A thread local evaluation context. Just allocate and fill in with data.
double length(const Vec3d &v)
Represents a parse or type checking error in an expression.
int endPos
Error end offset in expression string.
int startPos
Error start offset in expression string.
std::string error
Text of error.
Error(const std::string &errorIn, const int startPosIn, const int endPosIn)