00001 00045 namespace SCalc { 00046 00047 class ParserResult; 00048 class Expression; 00049 class FuncDef; 00050 00052 std::string version(); 00053 00054 00074 00075 class Session { 00076 protected: 00078 std::vector<std::string> variables; 00080 std::map<std::string,int> variables_numbers; 00081 00084 std::map<int, double> values; 00085 00091 std::map<std::string, int> functions_numbers; 00092 00094 std::vector<FuncDef *> functions; 00095 public: 00098 Session(); 00099 00102 ~Session(); 00103 00122 ParserResult * eval(const char *); 00123 00133 void eval_and_free(const char *); 00134 00142 int register_varname(const std::string &str); 00143 00144 int register_varname(const char * str); 00145 00149 const char * varname(int i); 00150 00159 std::vector<std::string> varnames() { 00160 std::vector<std::string> d = variables; 00161 return d; 00162 }; 00166 int nb_vars_defined() {return variables.size();}; 00167 00173 00176 00177 00178 00179 int set_var(int, double); 00180 00181 int set_var(const char * var, double val) { 00182 return set_var(register_varname(var), val); 00183 }; 00184 00185 int set_var(const std::string & var, double val) { 00186 return set_var(register_varname(var), val); 00187 }; 00188 00191 int unset_var(int); 00192 00194 int unset_var(std::string varname); 00195 int unset_var(const char * varname) { 00196 return unset_var(std::string(varname)); 00197 }; 00198 00200 int nb_vars_set() {return values.size();}; 00201 00204 std::set<int> vars_set(); 00205 00208 void fill_default(double * ); 00209 00212 int evaluable(Expression * expr); 00213 00217 00218 00219 00220 00221 int register_func_def(FuncDef *); 00222 00227 int replace_func_def(FuncDef *); 00228 00229 00231 int get_func(std::string); 00232 00234 int get_func(const char * name) 00235 { return get_func(std::string(name));}; 00236 00238 FuncDef * get_func_def(std::string); 00239 00241 FuncDef * get_func_def(const char * name) 00242 { return get_func_def(std::string(name));}; 00243 00245 int nb_args_func(std::string); 00247 int nb_args_func(const char * name) 00248 { return nb_args_func(std::string(name));}; 00249 00251 int nb_funcs() { return functions.size();}; 00252 00254 std::vector<std::string> func_names(); 00255 00262 Expression * constant(double value); 00263 00264 }; 00265 00266 };