--- rpl/src/interface_cas.cpp 2011/08/06 10:32:12 1.13 +++ rpl/src/interface_cas.cpp 2011/08/09 10:30:37 1.14 @@ -45,6 +45,21 @@ using namespace std; using namespace giac; #endif +void +initialisation_contexte_cas(struct_processus *s_etat_processus) +{ + s_etat_processus->contexte_cas = NULL; + return; +} + +void +liberation_contexte_cas(struct_processus *s_etat_processus) +{ + delete reinterpret_cast(s_etat_processus->contexte_cas); + s_etat_processus->contexte_cas = NULL; + + return; +} static unsigned char * conversion_rpl_vers_cas(struct_processus *s_etat_processus, @@ -403,6 +418,35 @@ interface_cas(struct_processus *s_etat_p unsigned int position; + giac::context *contexte; + + if (s_etat_processus->contexte_cas == NULL) + { + try + { + s_etat_processus->contexte_cas = new giac::context; + } + catch(bad_alloc exception) + { + s_etat_processus->erreur_systeme = d_es_allocation_memoire; + return; + } + catch(...) + { + s_etat_processus->erreur_execution = d_ex_erreur_interne_rplcas; + return; + } + } + + contexte = reinterpret_cast( + s_etat_processus->contexte_cas); + + if ((s_etat_processus->erreur_execution != d_ex) || + (s_etat_processus->erreur_systeme != d_es)) + { + return; + } + switch(commande) { case RPLCAS_INTEGRATION: @@ -441,16 +485,15 @@ interface_cas(struct_processus *s_etat_p try { - giac::context contexte; - gen variable( string(reinterpret_cast(argument_1)), - &contexte); + contexte); gen expression( string(reinterpret_cast(argument_2)), - &contexte); + contexte); - gen resultat = integrate_gen(expression, variable, &contexte); + gen resultat = integrate_gen(expression, variable, + contexte); string chaine = "'" + resultat.print() + "'"; conversion_cas_vers_rpl(s_etat_processus, @@ -588,8 +631,6 @@ interface_cas(struct_processus *s_etat_p try { - giac::context contexte; - int direction; if (argument_4 == NULL) @@ -604,14 +645,14 @@ interface_cas(struct_processus *s_etat_p gen expression( string(reinterpret_cast(argument_2)), - &contexte); + contexte); identificateur variable( string(reinterpret_cast(argument_1))); gen valeur(string(reinterpret_cast - (argument_3)), &contexte); + (argument_3)), contexte); gen resultat = limit(expression, variable, valeur, direction, - &contexte); + contexte); string chaine = "'" + resultat.print() + "'"; conversion_cas_vers_rpl(s_etat_processus,