struct pile // 1er essai : measures (2024-08-26) < générique == compliqué Comment faire ?

This commit is contained in:
Jean Sirmai 2024-08-26 22:11:51 +02:00
parent 432a0202a2
commit d2af43dcc9
Signed by: jean
GPG Key ID: FB3115C340E057E3
7 changed files with 82 additions and 56 deletions

View File

@ -38,10 +38,20 @@
/******************************************************************************/ /******************************************************************************/
// called by widgets through signal functions // called by widgets through signal functions
enum fsm_choice_EXEC_EDIT { EXEC, EDIT }; enum fsm_select_EXEC_EDIT { EXEC, EDIT };
enum fsm_choice_STATE_RULES_DATA { SYNTH, STATE, RULES, DATA }; enum fsm_select_STATE_RULES_DATA { SYNTH, STATE, RULES, DATA };
enum fsm_choice_STORE_RESTORE_RESET { STORE, RESTORE, RESET }; enum fsm_select_STORE_RESTORE_RESET { STORE, RESTORE, RESET };
enum fsm_measure_type {DATE_RULE_EXEC, RULE_EXEC_NB, OBJECT_NB, ELAPSED_TIME };
typedef struct pile // 1er essai : measures (2024-08-26)
{
int value; // to replace
int measure_type;
int *at_rule; // réserve un emplacement pour stocker une adresse mémoire.
// at_rule = &rule; < écrira l'adresse de rule dans cet emplacement.
struct pile *prev;
} pile;
#define n_rules 128 // arbitrary #define n_rules 128 // arbitrary
#define n_objects 32 // arbitrary too, #define n_objects 32 // arbitrary too,

View File

@ -33,6 +33,7 @@
#include <stddef.h> #include <stddef.h>
#include <gtk-4.0/gtk/gtk.h> #include <gtk-4.0/gtk/gtk.h>
#include "../include/fsm.h"
char *util_read_file (char *filename); char *util_read_file (char *filename);
@ -48,8 +49,15 @@ char *util_read_file (char *filename);
// Le piratage est illégal, // Le piratage est illégal,
// de même que sont interdits: cracks, warez, sérials (sauf évaluation), etc. // de même que sont interdits: cracks, warez, sérials (sauf évaluation), etc.
// Est bien sûr autorisé tout ce qui concerne les logiciels gratuits, freewares et évaluation. // Est bien sûr autorisé tout ce qui concerne les logiciels gratuits, freewares et évaluation.
//------------------------------------------------------------------------------
// typedef struct pile {int value; struct pile *prev;} pile; // structure d'un élément
// LE TYPE 'pile' EST REDÉFINI DANS fsm.h ET UTILISÉ DANS fsm/measure.c
// 2024-08-26 J'avais - trop vite ! - imaginé des piles ou listes génériques, mais
// en fait, chaque structure sera très typée et très spécifique
// (des règles, groupes de règles, objets, dates, durées, etc.)
typedef struct pile {int value; struct pile *prev;} pile; // structure d'un élément
void util_pile_clear (pile **); // vide toute la pile void util_pile_clear (pile **); // vide toute la pile
void util_pile_view (pile *); // affiche la pile en commençant par le sommet void util_pile_view (pile *); // affiche la pile en commençant par le sommet
int util_pile_push (pile **, int); // ajoute une valeur sur la pile int util_pile_push (pile **, int); // ajoute une valeur sur la pile
@ -80,7 +88,7 @@ int util_sorted_list_length (slist *sl); // renvoie le nombre d'él
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void util_pile_test(); void util_pile_test(); // called in fsm/measure.c
void util_double_list_test(); void util_double_list_test(); // " "
void util_sorted_list_test(); void util_sorted_list_test(); // " "

View File

@ -34,14 +34,14 @@
/******************************************************************************/ /******************************************************************************/
/* */ /* */
/* FFFFFFFFFFFF SSSS MM MM */ /* OOOOOOOOOOO OOOOO OOO OOO */
/* FF SS SS MMMM MMMM */ /* OO OO OO OOOO OOOO */
/* FF SS MM MM MM MM */ /* OO OO OO OO OO OO */
/* FFFFFFF SS MM MM MM MM */ /* OOOOOO OO OO OO OO OO */
/* FF SS MM MMM MM */ /* OO OO OO OOO OO */
/* FF SS MM MM */ /* OO OO OO OO */
/* FF SS SS MM MM */ /* OO OO OOO OO OO */
/* FF SSSSS MM MM */ /* OO OOOOOO OO OO */
/* */ /* */
/******************************************************************************/ /******************************************************************************/
@ -82,7 +82,8 @@ bool fsm_get_preferences_state() {return preferences_have_been_modified;}
static int choice_EXEC_EDIT = EXEC; static int choice_EXEC_EDIT = EXEC;
static int choice_STATE_RULES_DATA = STATE; static int choice_STATE_RULES_DATA = SYNTH; // THE FIRST PAGE TO BE PRESENTED
// SEE ALSO fsm/dispatch.c window_design_topbar_left() (the end)
int fsm_get_exec_edit() {return choice_EXEC_EDIT;} int fsm_get_exec_edit() {return choice_EXEC_EDIT;}
int fsm_get_state_rules_data() {return choice_STATE_RULES_DATA;} int fsm_get_state_rules_data() {return choice_STATE_RULES_DATA;}
@ -111,7 +112,7 @@ void fsm_set_state_rules_data (int choice)
/******************************************************************************/ /******************************************************************************/
/* D E B U G G E R S */ /* D E B U G G I N G */
/******************************************************************************/ /******************************************************************************/
static char *tab_0 [] = { "EXEC", "EDIT" }; static char *tab_0 [] = { "EXEC", "EDIT" };

View File

@ -35,7 +35,7 @@
/******************************************************************************/ /******************************************************************************/
/* */ /* */
/* FFFFFFFFFFFF SSSSS MM MM */ /* FFFFFFFFFFF SSSSS MM MM */
/* FF SSS SS MMMM MMMM */ /* FF SSS SS MMMM MMMM */
/* FF SS MM MM MM MM */ /* FF SS MM MM MM MM */
/* FFFFFFF SS MM MM MM MM */ /* FFFFFFF SS MM MM MM MM */
@ -105,5 +105,12 @@ void fsm_measures_list_init ()
fsm_debug_msg (0,0, "fsm_measures_list_init()", 2); // sub_automaton 2 fsm_debug_msg (0,0, "fsm_measures_list_init()", 2); // sub_automaton 2
if (0) util_pile_test(); if (0) util_pile_test();
if (0) util_double_list_test(); if (0) util_double_list_test();
util_sorted_list_test(); if (0) util_sorted_list_test();
pile *exemple = NULL; // doit être initialisée à NULL
printf ("push > %d\n", util_pile_push (&exemple, 4));
util_pile_view (exemple);
printf ("pop > %d\n", util_pile_pop (&exemple));
util_pile_view (exemple);
} }

View File

@ -78,10 +78,10 @@ int util_pile_length (pile *p)
void util_pile_view (pile *p) void util_pile_view (pile *p)
{ {
printf ("------ view pile (n = %d)\n", util_pile_length (p)); printf ("view pile (n = %d)\n", util_pile_length (p));
while (p) while (p)
{ {
printf ("%d\n", p->value); printf ("> %d\n", p->value);
p = p->prev; p = p->prev;
} }
puts ("------"); puts ("------");

View File

@ -78,7 +78,7 @@ int util_sorted_list_pop (slist **sl)
if (! *sl) return -1; if (! *sl) return -1;
tmp = (*sl)->suiv; tmp = (*sl)->suiv;
value = (*sl)->value; value = (*sl)->value;
printf("value = %d <> pb with free(sl) in pop()\n", (*sl)->value); printf("value = %d <> removed from the list by pop()\n", (*sl)->value);
free (*sl); free (*sl);
*sl = tmp; *sl = tmp;
return value; return value;

View File

@ -35,6 +35,7 @@
void util_pile_test() void util_pile_test()
{ {
pile *exemple = NULL; // doit être initialisée à NULL pile *exemple = NULL; // doit être initialisée à NULL
puts ("------");
printf ("push > %d\n", util_pile_push (&exemple, 1)); printf ("push > %d\n", util_pile_push (&exemple, 1));
printf ("push > %d\n", util_pile_push (&exemple, 2)); printf ("push > %d\n", util_pile_push (&exemple, 2));
@ -87,35 +88,34 @@ void util_sorted_list_test()
{ {
slist *Mysl = NULL; slist *Mysl = NULL;
puts("création d'une liste de 9 elements :"); puts("\ncréation d'une liste de 10 elements :");
util_sorted_list_insert (&Mysl,9); util_sorted_list_insert (&Mysl,9);
util_sorted_list_insert (&Mysl,8); util_sorted_list_insert (&Mysl,-8);
util_sorted_list_insert (&Mysl,3); util_sorted_list_insert (&Mysl,3);
util_sorted_list_insert (&Mysl,5); util_sorted_list_insert (&Mysl,5);
util_sorted_list_insert (&Mysl,1); util_sorted_list_insert (&Mysl,-1);
util_sorted_list_insert (&Mysl,5); util_sorted_list_insert (&Mysl,4);
util_sorted_list_insert (&Mysl,-6);
util_sorted_list_insert (&Mysl,2); util_sorted_list_insert (&Mysl,2);
util_sorted_list_insert (&Mysl,0); util_sorted_list_insert (&Mysl,0);
util_sorted_list_insert (&Mysl,7); util_sorted_list_insert (&Mysl,7);
util_sorted_list_view (Mysl); util_sorted_list_view (Mysl);
puts("retrait des 3 premiers elements :"); puts("retrait des 3 premiers elements :");
printf("%d\n",util_sorted_list_pop (&Mysl)); util_sorted_list_pop (&Mysl);
printf("%d\n",util_sorted_list_pop (&Mysl)); util_sorted_list_pop (&Mysl);
printf("%d\n",util_sorted_list_pop (&Mysl)); util_sorted_list_pop (&Mysl);
printf("Nb d'elements : %d\n", util_sorted_list_length (Mysl));
util_sorted_list_view (Mysl); util_sorted_list_view (Mysl);
puts("on vide de la liste puis on ajoute 4 elements :"); puts("ajout des 3 elements (8, 1, 6) :");
util_sorted_list_clear (&Mysl); util_sorted_list_insert (&Mysl,8);
util_sorted_list_insert (&Mysl,3);
util_sorted_list_insert (&Mysl,1); util_sorted_list_insert (&Mysl,1);
util_sorted_list_insert (&Mysl,9); util_sorted_list_insert (&Mysl,6);
util_sorted_list_insert (&Mysl,5);
printf("nb d'elements : %d\n", util_sorted_list_length (Mysl));
util_sorted_list_view (Mysl); util_sorted_list_view (Mysl);
util_sorted_list_clear (&Mysl); util_sorted_list_clear (&Mysl);
printf("clear()\n> nombre d'éléments restant = %d\n\n",
util_sorted_list_length(Mysl));
} }