11 #ifndef ONCE_FPARSER_H_    12 #define ONCE_FPARSER_H_    17 #ifdef FUNCTIONPARSER_SUPPORT_DEBUGGING    24 #pragma warning(disable : 4661)    29 template<
typename Value_t>
    35         SYNTAX_ERROR=0, MISM_PARENTH, MISSING_PARENTH, EMPTY_PARENTH,
    46     int Parse(
const char* Function, 
const std::string& Vars,
    47               bool useDegrees = 
false);
    48     int Parse(
const std::string& Function, 
const std::string& Vars,
    49               bool useDegrees = 
false);
    51     void setDelimiterChar(
char);
    53     static Value_t epsilon();
    54     static void setEpsilon(Value_t);
    56     const char* ErrorMsg() 
const;
    59     Value_t Eval(
const Value_t* Vars);
    60     int EvalError() 
const;
    62     bool AddConstant(
const std::string& name, Value_t value);
    63     bool AddUnit(
const std::string& name, Value_t value);
    65     typedef Value_t (*FunctionPtr)(
const Value_t*);
    67     bool AddFunction(
const std::string& name,
    68                      FunctionPtr, 
unsigned paramsAmount);
    71     class FunctionWrapper;
    73     template<
typename DerivedWrapper>
    74     bool AddFunctionWrapper(
const std::string& name, 
const DerivedWrapper&,
    75                             unsigned paramsAmount);
    77     FunctionWrapper* GetFunctionWrapper(
const std::string& name);
    79     bool RemoveIdentifier(
const std::string& name);
    84     int ParseAndDeduceVariables(
const std::string& 
function,
    85                                 int* amountOfVariablesFound = 0,
    86                                 bool useDegrees = 
false);
    87     int ParseAndDeduceVariables(
const std::string& 
function,
    88                                 std::string& resultVarString,
    89                                 int* amountOfVariablesFound = 0,
    90                                 bool useDegrees = 
false);
    91     int ParseAndDeduceVariables(
const std::string& 
function,
    92                                 std::vector<std::string>& resultVars,
    93                                 bool useDegrees = 
false);
   105     void ForceDeepCopy();
   109 #ifdef FUNCTIONPARSER_SUPPORT_DEBUGGING   113     void InjectRawByteCode(
const unsigned* bytecode, 
unsigned bytecodeAmount,
   114                            const Value_t* immed, 
unsigned immedAmount,
   117     void PrintByteCode(std::ostream& dest, 
bool showExpression = 
true) 
const;
   128     Data* getParserData();
   147     bool NameExists(
const char*, 
unsigned);
   148     bool ParseVariables(
const std::string&);
   149     int ParseFunction(
const char*, 
bool);
   152     void AddFunctionOpcode(
unsigned);
   153     void AddImmedOpcode(Value_t v);
   155     void CompilePowi(
long);
   156     bool TryCompilePowi(Value_t);
   158     const char* CompileIf(
const char*);
   159     const char* CompileFunctionParams(
const char*, 
unsigned);
   160     const char* CompileElement(
const char*);
   161     const char* CompilePossibleUnit(
const char*);
   162     const char* CompilePow(
const char*);
   163     const char* CompileUnaryMinus(
const char*);
   164     const char* CompileMult(
const char*);
   165     const char* CompileAddition(
const char*);
   166     const char* CompileComparison(
const char*);
   167     const char* CompileAnd(
const char*);
   168     const char* CompileExpression(
const char*);
   169     inline const char* CompileFunction(
const char*, 
unsigned);
   170     inline const char* CompileParenthesis(
const char*);
   171     inline const char* CompileLiteral(
const char*);
   172     template<
bool SetFlag>
   173     inline void PushOpcodeParam(
unsigned);
   174     template<
bool SetFlag>
   175     inline void PutOpcodeParamAt(
unsigned, 
unsigned offset);
   176     const char* Compile(
const char*);
   178     bool addFunctionWrapperPtr(
const std::string&, 
FunctionWrapper*, 
unsigned);
   184     static std::pair<const char*, Value_t> ParseLiteral(
const char*);
   185     static unsigned ParseIdentifier(
const char*);
   200 template<
typename Value_t>
   203     unsigned mReferenceCount;
   212     virtual Value_t callFunction(
const Value_t*) = 0;
   215 template<
typename Value_t>
   216 template<
typename DerivedWrapper>
   218 (
const std::string& name, 
const DerivedWrapper& wrapper, 
unsigned paramsAmount)
   220     return addFunctionWrapperPtr
   221         (name, 
new DerivedWrapper(wrapper), paramsAmount);
 
FunctionWrapper & operator=(const FunctionWrapper &)
 
FunctionWrapper(const FunctionWrapper &)
 
bool AddFunctionWrapper(const std::string &name, const DerivedWrapper &, unsigned paramsAmount)
 
virtual ~FunctionWrapper()