Skip to content

Commit

Permalink
add ptr to the caller
Browse files Browse the repository at this point in the history
  • Loading branch information
a-zakir committed Nov 17, 2023
1 parent 563accb commit 7847e90
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 38 deletions.
1 change: 1 addition & 0 deletions src/PNE/mps_define.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,6 @@ int * NomVarSuivant;

double objective_offset;
void *callback;
void *caller;

} PROBLEME_MPS;
1 change: 1 addition & 0 deletions src/PNE/pne_definition_arguments.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ La matrice des contrainte est decrite par les 4 vecteurs qui suivent. Elle doit
*/
double objective_offset;
void *callback;
void *caller;

} PROBLEME_A_RESOUDRE;

Expand Down
1 change: 1 addition & 0 deletions src/SIMPLEXE/spx_define.h
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,7 @@ double A1;

/*------------------------------------------*/
void *callback;
void *caller;

} PROBLEME_SPX;

Expand Down
1 change: 1 addition & 0 deletions src/SIMPLEXE/spx_definition_arguments.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ typedef struct {
/* Traces */
char AffichageDesTraces; /* Vaut OUI_SPX ou NON_SPX */
void *callback;
void *caller;

} PROBLEME_SIMPLEXE;

Expand Down
85 changes: 47 additions & 38 deletions src/SIMPLEXE/spx_simplexe.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

# include "spx_fonctions.h"
# include "spx_define.h"
#include "sirius_callback.h"

# ifdef SPX_UTILISER_LES_OUTILS_DE_GESTION_MEMOIRE_PROPRIETAIRE
# include "spx_memoire.h"
Expand All @@ -47,10 +48,14 @@ return;

PROBLEME_SPX * SPX_Simplexe( PROBLEME_SIMPLEXE * Probleme , PROBLEME_SPX * Spx )
{
void * Tas;

if ( Spx == NULL ) {
# ifdef SPX_UTILISER_LES_OUTILS_DE_GESTION_MEMOIRE_PROPRIETAIRE
callback_function call_back = (callback_function)Probleme->callback;
const char *welcome = "Sirius Welcome you!\n";
call_back(Probleme->caller, welcome, 4, SIRIUS_INFO);
void *Tas;

if (Spx == NULL)
{
#ifdef SPX_UTILISER_LES_OUTILS_DE_GESTION_MEMOIRE_PROPRIETAIRE
Tas = MEM_Init();
Spx = (PROBLEME_SPX *) MEM_Malloc( Tas, sizeof( PROBLEME_SPX ) );
if ( Spx == NULL ) {
Expand All @@ -60,8 +65,8 @@ if ( Spx == NULL ) {
}
memset( (char *) Spx, 0, sizeof( PROBLEME_SPX ) );
Spx->Tas = Tas;
# else
Tas = NULL;
#else
Tas = NULL;
Spx = (PROBLEME_SPX *) malloc( sizeof( PROBLEME_SPX ) );
if ( Spx == NULL ) {
printf("Saturation memoire, impossible d'allouer un objet PROBLEME_SPX\n");
Expand All @@ -70,40 +75,44 @@ if ( Spx == NULL ) {
}
memset( (char *) Spx, 0, sizeof( PROBLEME_SPX ) );
Spx->Tas = Tas;
# endif
}
#endif
}

Spx->AnomalieDetectee = NON_SPX;

setjmp( Spx->EnvSpx );

/* Pour ne pas avoir de warning a la compilation */
/* Attention, il ne faut pas faire appel à a une autre routine pour faire le setjmp
car lorsque le longjmp arrive, au return de la routine en question on se retrouve
n'importe ou et ça plante */
/*SPX_InitSetJmp( Spx->EnvSpx );*/

if ( Spx->AnomalieDetectee != NON_SPX ) {
/* Liberation du probleme */
/* Meme si une anomalie a ete detectee il est preferable de ne pas liberer le probleme
ici. Le probleme est de toute facon libere en fin de PNE . */
/* SPX_LibererProbleme( Spx ); */
Probleme->ExistenceDUneSolution = SPX_ERREUR_INTERNE;
if ( Spx->AnomalieDetectee == SPX_MATRICE_DE_BASE_SINGULIERE ) {
Probleme->ExistenceDUneSolution = SPX_MATRICE_DE_BASE_SINGULIERE;
/*printf("Trace simplexe: Matrice de base singuliere\n");*/
Spx->AnomalieDetectee = NON_SPX;

setjmp(Spx->EnvSpx);

/* Pour ne pas avoir de warning a la compilation */
/* Attention, il ne faut pas faire appel � a une autre routine pour faire le setjmp
car lorsque le longjmp arrive, au return de la routine en question on se retrouve
n'importe ou et �a plante */
/*SPX_InitSetJmp( Spx->EnvSpx );*/

if (Spx->AnomalieDetectee != NON_SPX)
{
/* Liberation du probleme */
/* Meme si une anomalie a ete detectee il est preferable de ne pas liberer le probleme
ici. Le probleme est de toute facon libere en fin de PNE . */
/* SPX_LibererProbleme( Spx ); */
Probleme->ExistenceDUneSolution = SPX_ERREUR_INTERNE;
if (Spx->AnomalieDetectee == SPX_MATRICE_DE_BASE_SINGULIERE)
{
Probleme->ExistenceDUneSolution = SPX_MATRICE_DE_BASE_SINGULIERE;
/*printf("Trace simplexe: Matrice de base singuliere\n");*/
}
return (Spx);
}
return( Spx );
}
else {
/* Optimisation */
SPX_SimplexeCalculs( Probleme , Spx );
/* On ne renvoie pas de pointeur a la structure si sa desallocation
a ete demandee par l'appelant */
if ( Probleme->LibererMemoireALaFin == OUI_SPX ) Spx = NULL;
}
return( Spx );
else
{
/* Optimisation */
SPX_SimplexeCalculs(Probleme, Spx);
/* On ne renvoie pas de pointeur a la structure si sa desallocation
a ete demandee par l'appelant */
if (Probleme->LibererMemoireALaFin == OUI_SPX)
Spx = NULL;
}

return (Spx);
}


Expand Down

0 comments on commit 7847e90

Please sign in to comment.