SCalc
lib/session.hh
Go to the documentation of this file.
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 };