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
enum fsm_choice_EXEC_EDIT { EXEC, EDIT };
enum fsm_choice_STATE_RULES_DATA { SYNTH, STATE, RULES, DATA };
enum fsm_choice_STORE_RESTORE_RESET { STORE, RESTORE, RESET };
enum fsm_select_EXEC_EDIT { EXEC, EDIT };
enum fsm_select_STATE_RULES_DATA { SYNTH, STATE, RULES, DATA };
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_objects 32 // arbitrary too,

View File

@ -33,6 +33,7 @@
#include <stddef.h>
#include <gtk-4.0/gtk/gtk.h>
#include "../include/fsm.h"
char *util_read_file (char *filename);
@ -48,8 +49,15 @@ char *util_read_file (char *filename);
// Le piratage est illégal,
// 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.
//------------------------------------------------------------------------------
// 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_view (pile *); // affiche la pile en commençant par le sommet
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_double_list_test();
void util_sorted_list_test();
void util_pile_test(); // called in fsm/measure.c
void util_double_list_test(); // " "
void util_sorted_list_test(); // " "

View File

@ -34,14 +34,14 @@
/******************************************************************************/
/* */
/* FFFFFFFFFFFF SSSS MM MM */
/* FF SS SS MMMM MMMM */
/* FF SS MM MM MM MM */
/* FFFFFFF SS MM MM MM MM */
/* FF SS MM MMM MM */
/* FF SS MM MM */
/* FF SS SS MM MM */
/* FF SSSSS MM MM */
/* OOOOOOOOOOO OOOOO OOO OOO */
/* OO OO OO OOOO OOOO */
/* OO OO OO OO OO OO */
/* OOOOOO OO OO OO OO OO */
/* OO OO OO OOO OO */
/* OO OO OO OO */
/* OO OO OOO OO OO */
/* 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_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_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" };

View File

@ -35,14 +35,14 @@
/******************************************************************************/
/* */
/* FFFFFFFFFFFF SSSSS MM MM */
/* FF SSS SS MMMM MMMM */
/* FF SS MM MM MM MM */
/* FFFFFFF SS MM MM MM MM */
/* FF SS MM MM MM */
/* FF SSS MM MM */
/* FF SS SSS MM MM */
/* FF SSSSSS MM MM */
/* FFFFFFFFFFF SSSSS MM MM */
/* FF SSS SS MMMM MMMM */
/* FF SS MM MM MM MM */
/* FFFFFFF SS MM MM MM MM */
/* FF SS MM MM MM */
/* FF SSS MM MM */
/* FF SS SSS MM MM */
/* FF SSSSSS MM MM */
/* */
/******************************************************************************/
@ -105,5 +105,12 @@ void fsm_measures_list_init ()
fsm_debug_msg (0,0, "fsm_measures_list_init()", 2); // sub_automaton 2
if (0) util_pile_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)
{
printf ("------ view pile (n = %d)\n", util_pile_length (p));
printf ("view pile (n = %d)\n", util_pile_length (p));
while (p)
{
printf ("%d\n", p->value);
printf ("> %d\n", p->value);
p = p->prev;
}
puts ("------");

View File

@ -78,7 +78,7 @@ int util_sorted_list_pop (slist **sl)
if (! *sl) return -1;
tmp = (*sl)->suiv;
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);
*sl = tmp;
return value;

View File

@ -35,6 +35,7 @@
void util_pile_test()
{
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, 2));
@ -85,37 +86,36 @@ void util_double_list_test()
void util_sorted_list_test()
{
slist *Mysl = NULL;
slist *Mysl = NULL;
puts("création d'une liste de 9 elements :");
util_sorted_list_insert (&Mysl,9);
util_sorted_list_insert (&Mysl,8);
util_sorted_list_insert (&Mysl,3);
util_sorted_list_insert (&Mysl,5);
util_sorted_list_insert (&Mysl,1);
util_sorted_list_insert (&Mysl,5);
util_sorted_list_insert (&Mysl,2);
util_sorted_list_insert (&Mysl,0);
util_sorted_list_insert (&Mysl,7);
util_sorted_list_view (Mysl);
puts("\ncréation d'une liste de 10 elements :");
util_sorted_list_insert (&Mysl,9);
util_sorted_list_insert (&Mysl,-8);
util_sorted_list_insert (&Mysl,3);
util_sorted_list_insert (&Mysl,5);
util_sorted_list_insert (&Mysl,-1);
util_sorted_list_insert (&Mysl,4);
util_sorted_list_insert (&Mysl,-6);
util_sorted_list_insert (&Mysl,2);
util_sorted_list_insert (&Mysl,0);
util_sorted_list_insert (&Mysl,7);
util_sorted_list_view (Mysl);
puts("retrait des 3 premiers elements :");
printf("%d\n",util_sorted_list_pop (&Mysl));
printf("%d\n",util_sorted_list_pop (&Mysl));
printf("%d\n",util_sorted_list_pop (&Mysl));
printf("Nb d'elements : %d\n", util_sorted_list_length (Mysl));
util_sorted_list_view (Mysl);
puts("retrait des 3 premiers elements :");
util_sorted_list_pop (&Mysl);
util_sorted_list_pop (&Mysl);
util_sorted_list_pop (&Mysl);
util_sorted_list_view (Mysl);
puts("on vide de la liste puis on ajoute 4 elements :");
util_sorted_list_clear (&Mysl);
util_sorted_list_insert (&Mysl,3);
util_sorted_list_insert (&Mysl,1);
util_sorted_list_insert (&Mysl,9);
util_sorted_list_insert (&Mysl,5);
printf("nb d'elements : %d\n", util_sorted_list_length (Mysl));
util_sorted_list_view (Mysl);
puts("ajout des 3 elements (8, 1, 6) :");
util_sorted_list_insert (&Mysl,8);
util_sorted_list_insert (&Mysl,1);
util_sorted_list_insert (&Mysl,6);
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));
}