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