1 // -*- mode:C++ ; compile-command: "g++ -I.. -g -c identificateur.cc" -*- 2 /* 3 * Copyright (C) 2000,2014 B. Parisse, Institut Fourier, 38402 St Martin d'Heres 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 #ifndef _GIAC_IDENTIFICATEUR_H 19 #define _GIAC_IDENTIFICATEUR_H 20 #include "first.h" 21 #include <string> 22 #include <iostream> 23 #include "global.h" 24 #include "gen.h" 25 26 #ifndef NO_NAMESPACE_GIAC 27 namespace giac { 28 #endif // ndef NO_NAMESPACE_GIAC 29 30 extern int protection_level; // for local vars 31 32 const int MAXLENSIZE = 1000000; // max size of a line in files 33 34 struct alias_identificateur { 35 int * ref_count; 36 gen * value; 37 const char * id_name; 38 vecteur * localvalue; 39 short int * quoted; 40 }; 41 42 // make g identificateurs evaluated as global in null context 43 gen global_eval(const gen & g,int level); 44 gen global_evalf(const gen & g,int level); 45 gen globalize(const gen & g); 46 // return the local value of i, if globalize is true, replace idnt with 47 // global idnt in returned value 48 gen do_local_eval(const identificateur & i,int level,bool globalize); 49 50 std::ostream & operator << (std::ostream & os,const identificateur & s); 51 52 #ifdef DOUBLEVAL // #ifdef GIAC_GENERIC_CONSTANTS_ID 53 extern const char string_euler_gamma[]; 54 extern identificateur _IDNT_euler_gamma; 55 extern gen cst_euler_gamma; 56 extern const char string_pi[]; 57 identificateur & _IDNT_pi(); 58 extern alias_ref_identificateur ref_pi; 59 extern gen cst_pi; 60 extern const char string_infinity[]; 61 identificateur & _IDNT_infinity(); 62 extern alias_ref_identificateur ref_infinity; 63 extern gen unsigned_inf; 64 extern alias_gen & alias_unsigned_inf; 65 extern const char string_undef[]; 66 identificateur & _IDNT_undef(); 67 extern gen undef; 68 #else 69 extern const char string_euler_gamma[]; 70 extern const gen & cst_euler_gamma; 71 72 extern const char string_pi[]; 73 const identificateur & _IDNT_pi(); 74 extern const alias_ref_identificateur ref_pi; 75 extern const alias_gen alias_cst_pi; 76 extern const gen & cst_pi; 77 78 extern const char string_infinity[]; 79 const identificateur & _IDNT_infinity(); 80 extern const alias_gen alias_unsigned_inf; 81 extern const gen & unsigned_inf; 82 83 extern const char string_undef[]; 84 const identificateur & _IDNT_undef(); 85 extern const alias_ref_identificateur ref_infinity; 86 extern const alias_gen alias_undef; 87 extern const gen & undef; 88 #endif 89 90 #if defined GIAC_HAS_STO_38 || defined NSPIRE || defined NSPIRE_NEWLIB || defined KHICAS 91 extern const identificateur & a__IDNT; 92 extern const alias_gen alias_a38; 93 #define a__IDNT_e (*(gen const *)&alias_a38) 94 extern const identificateur & b__IDNT; 95 extern const alias_gen alias_b38; 96 #define b__IDNT_e (*(gen const *)&alias_b38) 97 extern const identificateur & c__IDNT; 98 extern const alias_gen alias_c38; 99 #define c__IDNT_e (*(gen const *)&alias_c38) 100 extern const identificateur & d__IDNT; 101 extern const alias_gen alias_d38; 102 #define d__IDNT_e (*(gen const *)&alias_d38) 103 extern const identificateur & e__IDNT; 104 extern const alias_gen alias_e38; 105 #define e__IDNT_e (*(gen const *)&alias_e38) 106 extern const identificateur & f__IDNT; 107 extern const alias_gen alias_f38; 108 #define f__IDNT_e (*(gen const *)&alias_f38) 109 extern const identificateur & g__IDNT; 110 extern const alias_gen alias_g38; 111 #define g__IDNT_e (*(gen const *)&alias_g38) 112 extern const identificateur & h__IDNT; 113 extern const alias_gen alias_h38; 114 #define h__IDNT_e (*(gen const *)&alias_h38) 115 extern const identificateur & i__IDNT; 116 extern const alias_gen alias_i38; 117 #define i__IDNT_e (*(gen const *)&alias_i38) 118 extern const identificateur & I__IDNT; 119 extern const alias_gen alias_j38; 120 #define j__IDNT_e (*(gen const *)&alias_j38) 121 extern const identificateur & k__IDNT; 122 extern const alias_gen alias_k38; 123 #define k__IDNT_e (*(gen const *)&alias_k38) 124 extern const identificateur & l__IDNT; 125 extern const alias_gen alias_l38; 126 #define l__IDNT_e (*(gen const *)&alias_l38) 127 extern const identificateur & m__IDNT; 128 extern const alias_gen alias_m38; 129 #define m__IDNT_e (*(gen const *)&alias_m38) 130 extern const identificateur & n__IDNT; 131 extern const alias_gen alias_n38; 132 #define n__IDNT_e (*(gen const *)&alias_n38) 133 extern const identificateur & o__IDNT; 134 extern const alias_gen alias_o38; 135 #define o__IDNT_e (*(gen const *)&alias_o38) 136 extern const identificateur & p__IDNT; 137 extern const alias_gen alias_p38; 138 #define p__IDNT_e (*(gen const *)&alias_p38) 139 extern const identificateur & q__IDNT; 140 extern const alias_gen alias_q38; 141 #define q__IDNT_e (*(gen const *)&alias_q38) 142 extern const identificateur & r__IDNT; 143 extern const alias_gen alias_r38; 144 #define r__IDNT_e (*(gen const *)&alias_r38) 145 extern const identificateur & s__IDNT; 146 extern const alias_gen alias_s38; 147 #define s__IDNT_e (*(gen const *)&alias_s38) 148 extern const identificateur & t__IDNT; 149 extern const alias_gen alias_t38; 150 #define t__IDNT_e (*(gen const *)&alias_t38) 151 extern const identificateur & u__IDNT; 152 extern const alias_gen alias_u38; 153 #define u__IDNT_e (*(gen const *)&alias_u38) 154 extern const identificateur & v__IDNT; 155 extern const alias_gen alias_v38; 156 #define v__IDNT_e (*(gen const *)&alias_v38) 157 extern const identificateur & w__IDNT; 158 extern const alias_gen alias_w38; 159 #define w__IDNT_e (*(gen const *)&alias_w38) 160 extern const identificateur & x__IDNT; 161 extern const alias_gen alias_x38; 162 #define x__IDNT_e (*(gen const *)&alias_x38) 163 extern const identificateur & y__IDNT; 164 extern const alias_gen alias_y38; 165 #define y__IDNT_e (*(gen const *)&alias_y38) 166 extern const identificateur & z__IDNT; 167 extern const alias_gen alias_z38; 168 #define z__IDNT_e (*(gen const *)&alias_z38) 169 extern const identificateur & theta__IDNT; 170 extern const gen & theta__IDNT_e; 171 extern const identificateur & _IDNT_id_at; 172 extern const identificateur & CST__IDNT; 173 extern const identificateur & laplace_var; 174 175 extern const gen & CST__IDNT_e; 176 // extern gen & vx_var; 177 // commented otherwise can not make assign/assumptions on vx_var 178 // if must uncomment, check extern gen vx_var declaration after endif 179 #else 180 extern identificateur a__IDNT; 181 extern gen a__IDNT_e; 182 extern identificateur b__IDNT; 183 extern gen b__IDNT_e; 184 extern identificateur c__IDNT; 185 extern gen c__IDNT_e; 186 extern identificateur d__IDNT; 187 extern gen d__IDNT_e; 188 extern identificateur e__IDNT; 189 extern gen e__IDNT_e; 190 extern identificateur f__IDNT; 191 extern gen f__IDNT_e; 192 extern identificateur g__IDNT; 193 extern gen g__IDNT_e; 194 extern identificateur h__IDNT; 195 extern gen h__IDNT_e; 196 extern identificateur i__IDNT; 197 extern gen i__IDNT_e; 198 extern identificateur I__IDNT; 199 extern gen j__IDNT_e; 200 extern identificateur k__IDNT; 201 extern gen k__IDNT_e; 202 extern identificateur l__IDNT; 203 extern gen l__IDNT_e; 204 extern identificateur m__IDNT; 205 extern gen m__IDNT_e; 206 extern identificateur n__IDNT; 207 extern gen n__IDNT_e; 208 extern identificateur o__IDNT; 209 extern gen o__IDNT_e; 210 extern identificateur p__IDNT; 211 extern gen p__IDNT_e; 212 extern identificateur q__IDNT; 213 extern gen q__IDNT_e; 214 extern identificateur r__IDNT; 215 extern gen r__IDNT_e; 216 extern identificateur s__IDNT; 217 extern gen s__IDNT_e; 218 extern identificateur t__IDNT; 219 extern gen t__IDNT_e; 220 extern identificateur u__IDNT; 221 extern gen u__IDNT_e; 222 extern identificateur v__IDNT; 223 extern gen v__IDNT_e; 224 extern identificateur w__IDNT; 225 extern gen w__IDNT_e; 226 extern identificateur x__IDNT; 227 extern gen x__IDNT_e; 228 extern identificateur y__IDNT; 229 extern gen y__IDNT_e; 230 extern identificateur z__IDNT; 231 extern gen z__IDNT_e; 232 extern identificateur laplace_var; 233 extern identificateur theta__IDNT; 234 extern gen theta__IDNT_e; 235 extern identificateur _IDNT_id_at; 236 extern identificateur CST__IDNT; 237 extern gen CST__IDNT_e; 238 #endif 239 extern gen vx_var; 240 extern const gen * const tab_one_letter_idnt[]; 241 // small utility to remove #... 242 int removecomments(const char * ss,char * ss2); 243 244 245 #ifndef NO_NAMESPACE_GIAC 246 } 247 #endif // ndef NO_NAMESPACE_GIAC 248 249 #endif // _GIAC_IDENTIFICATEUR_H 250