1 2 /* 3 * Math2 4 * Copyright (c) 2004-2007 by Mattias Hultgren <tilda_o_tize@hotmail.com> 5 * 6 * See math2.h 7 */ 8 9 /* 10 * This file should NOT be include by more than math2-files 11 */ 12 13 #ifndef MATH2_INTERN_H_ 14 #define MATH2_INTERN_H_ 15 16 17 18 #include "math2.h" 19 20 namespace math 21 { 22 23 void parse_create_symbol_vector(const utf8_string &string, Vector<utf8_string> *symbols) throw(error_obj); 24 25 26 typedef void (*CodeBlockFunctionPtr)(Variable *res, Variable *left, const Variable *right, 27 const utf8_string &name); 28 29 enum reserved_type { reserved_function, reserved_variable, reserved_integer, 30 reserved_real, reserved_complex, reserved_string, 31 reserved_matrix, reserved_picture, reserved_array, 32 reserved_boolean, reserved_return, reserved_if, 33 reserved_else, reserved_while, reserved_break, 34 reserved_continue }; 35 36 37 class ArgumentType 38 { 39 public: 40 reserved_type type; 41 utf8_string variable_name; 42 }; 43 44 class FunctionList 45 { 46 private: 47 class FunctionListElement 48 { 49 public: 50 utf8_string name; 51 BuiltinFunctionPtr func; 52 int priority; 53 bool need_left, need_right; 54 bool isdeletable, hard_linking; 55 bool is_code_block_function; 56 }; 57 58 Vector<FunctionListElement> list; 59 60 void set_as_code_block_function( const utf8_string &name ); 61 62 public: FunctionList()63 FunctionList() {} 64 FunctionList(const FunctionList &src); ~FunctionList()65 ~FunctionList() {} 66 67 void add_function(const utf8_string &new_name, BuiltinFunctionPtr new_func, int new_priority, bool need_left, bool need_right, 68 bool new_isdeletable = false, bool hard_linking = true ) throw(error_obj); 69 70 void add_this_code_block_function(const utf8_string &new_name, CodeBlock *function, 71 const Vector<ArgumentType> &arguments) throw(error_obj); 72 73 // returns 1 if the function was found and deleted 74 // return -1 if the function was found but was undeletable 75 // return 0 if the function wasn't found 76 int delete_function(const utf8_string &name); 77 78 // returns true if the function was found and isdeletable-flag is cleared 79 // returns false if the function wasn't found 80 bool set_undeletable(const utf8_string &name); 81 82 // returns true if there is a function with this name, else false is returned 83 bool check_for(const utf8_string &name) const; 84 85 // returns pointer to function, also sets priority, need_left, need_right, hard_linking 86 // if function wasn't found zero is returned 87 BuiltinFunctionPtr get( const utf8_string &name, int *priority, bool *need_left, bool *need_right, bool *hard_linking ) const; 88 }; 89 extern FunctionList function_list; 90 91 void builtin_hook_get(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 92 void builtin_hook_set(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 93 void builtin_round_eval(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 94 void builtin_hook_set_next(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 95 96 void builtin_append(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 97 void builtin_array_of_two(Variable *res, Variable *left, const Variable *right, VariableList *private_varlist) throw(error_obj); 98 void builtin_axes(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 99 void builtin_circle(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 100 void builtin_clear(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 101 void builtin_get_bottom(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 102 void builtin_get_col(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 103 void builtin_get_height(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 104 void builtin_get_left(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 105 void builtin_get_right(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 106 void builtin_get_row(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 107 void builtin_get_top(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 108 void builtin_get_type(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 109 void builtin_get_width(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 110 void builtin_grid(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 111 void builtin_insert(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 112 void builtin_line(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 113 void builtin_merge(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 114 void builtin_pixel_circle(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 115 void builtin_pixel_line(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 116 void builtin_plot(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 117 void builtin_pow_mod(Variable *res, Variable *left, const Variable *right, VariableList *private_varlist) throw(error_obj); 118 void builtin_remove(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 119 void builtin_set_pixel(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 120 void builtin_set_point(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 121 void builtin_set_window(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 122 123 124 void builtin_abs(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 125 void builtin_acos(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 126 void builtin_acosh(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 127 void builtin_adj(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 128 void builtin_almost_eq(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 129 void builtin_and(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 130 void builtin_arg(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 131 void builtin_array(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 132 void builtin_asin(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 133 void builtin_asinh(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 134 void builtin_atan(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 135 void builtin_atanh(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 136 void builtin_comb(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 137 void builtin_cos(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 138 void builtin_cosh(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 139 void builtin_dec(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 140 void builtin_decrement(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 141 void builtin_delete(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 142 void builtin_det(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 143 void builtin_div(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 144 void builtin_equal(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 145 void builtin_error(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 146 void builtin_faculty(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 147 void builtin_fpart(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 148 void builtin_frac(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 149 void builtin_greater(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 150 void builtin_greater_eq(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 151 void builtin_im(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 152 void builtin_inc(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 153 void builtin_intdiv(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 154 void builtin_ipart(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 155 void builtin_isqrt(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 156 void builtin_ln(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 157 void builtin_log(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 158 void builtin_log2(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 159 void builtin_make_constant(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 160 void builtin_make_type_locked(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 161 void builtin_make_undeletable(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 162 void builtin_matrix(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 163 void builtin_minus(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 164 void builtin_modulo(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 165 void builtin_mul(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 166 void builtin_nderiv(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 167 void builtin_neg(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 168 void builtin_nint(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 169 void builtin_not(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 170 void builtin_notequal(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 171 void builtin_nsolve(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 172 void builtin_or(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 173 void builtin_perm(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 174 void builtin_picture(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 175 void builtin_plus(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 176 void builtin_polyreg(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 177 void builtin_pow(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 178 void builtin_rand(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 179 void builtin_re(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 180 void builtin_set(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 181 void builtin_set_add(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 182 void builtin_set_div(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 183 void builtin_set_intdiv(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 184 void builtin_set_mul(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 185 void builtin_set_pow(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 186 void builtin_set_sub(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 187 void builtin_shade(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 188 void builtin_sin(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 189 void builtin_sinh(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 190 void builtin_smaller(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 191 void builtin_smaller_eq(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 192 void builtin_sqrt(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 193 void builtin_sum(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 194 void builtin_table(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 195 void builtin_table2d(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 196 void builtin_tan(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 197 void builtin_tanh(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 198 void builtin_time(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 199 void builtin_xor(Variable *res, Variable *left,const Variable *right, VariableList *private_varlist) throw(error_obj); 200 201 202 203 204 205 } // namespace math 206 207 208 #endif // MATH2_INTERN_H_ 209