measures list pourrait être une liste simple triée

This commit is contained in:
Jean Sirmai 2024-08-28 06:19:06 +02:00
parent 9e0ef7d28f
commit 571e247fd8
Signed by: jean
GPG Key ID: FB3115C340E057E3
4 changed files with 111 additions and 116 deletions

View File

@ -44,22 +44,15 @@ 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 m_pile // 1er essai : measures (2024-08-26)
{
int value; // to replace
int measure_type;
int *p_rule; // réserve un emplacement pour stocker une adresse mémoire.
// at_rule = &rule; < écrira l'adresse de rule dans cet emplacement.
struct m_pile *prev;
} m_pile;
#define n_rules 128 // arbitrary
#define n_objects 32 // arbitrary too,
#define n_situations 128 // and so on...
typedef struct measure_list {int value; struct measure_list *suiv;} measure_list ;
void fsm_init(); // def: fsm/dispatch; call: main;
void fsm_preferences_init(); // def: fsm/prefer; call: fsm/dispatch;
void fsm_measures_list_init(); // def: fsm/measure/list.c; call: fsm/dispatch;
void fsm_measures_list_init(); // def: fsm/measure/manage.c; call: fsm/dispatch;
void fsm_results_list_init(); // def: fsm/results; call: fsm/dispatch;
void fsm_displayable_list_init(); // def: fsm/prefer; call: fsm/dispatch;
@ -91,7 +84,11 @@ void fsm_debug_msg (int choice, int value, char *string, int sub_automaton);
// fsm/measure;
// fsm/result;
int fsm_pile_push (m_pile **p, int val); // def: measure/list call measure/list
int fsm_pile_pop (m_pile **p); // def: measure/list call measure/list
void fsm_pile_view (m_pile *p); // def: measure/list call measure/list
int fsm_pile_length (m_pile *p); // def: measure/list call measure/list
// --------------------------------------------------------------- WIP
// def: measure/list call measure/list (following functions...)
void fsm_measures_sorted_list_insert (measure_list **sl, int value);
int fsm_measures_sorted_list_pop (measure_list **sl);
int fsm_measures_sorted_list_length (measure_list *sl);
void fsm_measures_sorted_list_clear (measure_list **sl);
void fsm_measures_sorted_list_view (measure_list *sl);
void fsm_measures_sorted_list_test(); // def: measure/manage; call measure/manage;

View File

@ -2,7 +2,7 @@
* *
* Gem-graph client *
* *
* State machine *
* State machine / Measures *
* *
* Copyright © 2024 Libre en Communs <contact@a-lec.org> *
* Copyright © 2024 Adrien Bourmault <neox@a-lec.org> *
@ -31,49 +31,25 @@
#include <stdio.h>
#include <stdlib.h>
#include "../../../include/fsm.h"
#include "../../../include/util.h"
/******************************************************************************/
/* An editable list of measurements is defined and maintained here */
/* - - - */
/* Each possible measurement can be activated or silenced */
/* - - - */
/* The measures relate to */
/* - the number of occurrences of a rule or group of rules, */
/* - the number of objects or situations before/after the rule was applied, */
/* - the time (date) of the event, */
/* - the time elapsed between two events, */
/* - the occurrence of events C between events A and B, */
/* */
/* 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 */
/* */
/* When a list of measurements is established, it is possible to evaluate */
/* if the results of a measurement are correlated with some other results. */
/******************************************************************************/
/******************************************************************************/
/* Each state of the finite state machine (fsm) must be */
/* - saved at the end of a work session and */
/* - reread (available) at the start of a new session. */
/* */
/* No state of the fsm should be defined in another module. */
/* No fsm transition needs to be executed in another module. */
/******************************************************************************/
/******************************************************************************/
/* M E A S U R E M E N T S */
/******************************************************************************/
// An editable list of measurements is defined and maintained here.
// Each possible measurement can be activated or silenced.
// The measures relate to
// - the number of occurrences of a rule or group of rules,
// - the number of objects or situations before/after the rule was applied,
// - the time (date) of the event,
// - the time elapsed between two events,
// - the occurrence of events C between events A and B
// - (non limitative, maybe) < pattern recognition tools ?
// When a list of measurements is established, it is possible to evaluate
// if the results of a measurement are correlated with some other results.
//------------------------------------------------------------------------------
// structure de données : chaque "item" comportera :
@ -97,58 +73,67 @@
// - pointeur vers une liste de mesures similaires
// - pointeur vers des données, des représentations de données ?
void fsm_measures_list_init ()
void fsm_measures_sorted_list_insert (measure_list **ml, int value)
{
m_pile *exemple = NULL; // doit être initialisée à NULL
printf ("fsm push > %d\n", fsm_pile_push (&exemple, 4));
fsm_pile_view (exemple);
printf ("fsm pop > %d\n", fsm_pile_pop (&exemple));
fsm_pile_view (exemple);
measure_list *tmp = NULL;
measure_list *cml = *ml;
measure_list *elem = malloc (sizeof (measure_list));
if (!elem) exit (EXIT_FAILURE);
elem->value = value;
while (cml && cml->value < value)
{
tmp = cml;
cml = cml->suiv;
}
elem->suiv = cml;
if (tmp) tmp->suiv = elem;
else *ml = elem;
}
int fsm_pile_push (m_pile **p, int val)
int fsm_measures_sorted_list_pop (measure_list **ml)
{
m_pile *element = malloc (sizeof(m_pile));
if (!element) exit (EXIT_FAILURE); // Si l'allocation a échoué.
element->value = val;
element->prev = *p;
*p = element; // Le pointeur pointe sur le dernier élément.
return val;
int value;
measure_list *tmp;
if (! *ml) return -1;
tmp = (*ml)->suiv;
value = (*ml)->value;
printf("value = %d < removed from the measures list\n", (*ml)->value);
free (*ml);
*ml = tmp;
return value;
}
int fsm_pile_pop (m_pile **p)
int fsm_measures_sorted_list_length (measure_list *ml)
{
int Val;
m_pile *tmp;
if (!*p) return -1; // Retourne -1 si la pile est vide.
tmp = (*p)->prev;
Val = (*p)->value;
free (*p);
*p = tmp; // Le pointeur pointe sur le dernier élément.
return Val; // Retourne la value soutirée de la pile.
}
int fsm_pile_length (m_pile *p)
{
int n=0;
while (p)
int n = 0;
while (ml)
{
n++;
p = p->prev;
ml = ml->suiv;
}
return n;
}
void fsm_pile_view (m_pile *p)
void fsm_measures_sorted_list_clear (measure_list **ml)
{
printf ("fsm view pile (n = %d)\n", fsm_pile_length (p));
while (p)
measure_list *tmp;
while (*ml)
{
printf ("fsm > %d\n", p->value);
p = p->prev;
tmp = (*ml)->suiv;
free (*ml);
*ml = tmp;
}
puts ("------");
}
void fsm_measures_sorted_list_view (measure_list *ml)
{
printf ("-------- view measures list (n = %d)\n",
fsm_measures_sorted_list_length (ml));
while(ml)
{
printf("%d\n", ml->value);
ml = ml->suiv;
}
puts ("--------------");
}

View File

@ -2,7 +2,7 @@
* *
* Gem-graph client *
* *
* State machine *
* State machine / Measures *
* *
* Copyright © 2024 Libre en Communs <contact@a-lec.org> *
* Copyright © 2024 Adrien Bourmault <neox@a-lec.org> *
@ -33,30 +33,6 @@
#include "../../../include/fsm.h"
#include "../../../include/util.h"
/******************************************************************************/
/* */
/* 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 */
/* */
/******************************************************************************/
/******************************************************************************/
/* Each state of the finite state machine (fsm) must be */
/* - saved at the end of a work session and */
/* - reread (available) at the start of a new session. */
/* */
/* No state of the fsm should be defined in another module. */
/* No fsm transition needs to be executed in another module. */
/******************************************************************************/
/******************************************************************************/
/* M E A S U R E M E N T S */
/******************************************************************************/
@ -100,4 +76,40 @@
void fsm_add_measure (char *measure_name) {fsm_debug_msg (2, 0, measure_name, 2);}
void fsm_measures_list_init() {fsm_measures_sorted_list_test();}
void fsm_measures_sorted_list_test()
{
measure_list *Mysl = NULL;
puts("\ncréation d'une liste de 10 elements :");
fsm_measures_sorted_list_insert (&Mysl,9);
fsm_measures_sorted_list_insert (&Mysl,-8);
fsm_measures_sorted_list_insert (&Mysl,3);
fsm_measures_sorted_list_insert (&Mysl,5);
fsm_measures_sorted_list_insert (&Mysl,-1);
fsm_measures_sorted_list_insert (&Mysl,4);
fsm_measures_sorted_list_insert (&Mysl,-6);
fsm_measures_sorted_list_insert (&Mysl,2);
fsm_measures_sorted_list_insert (&Mysl,0);
fsm_measures_sorted_list_insert (&Mysl,7);
fsm_measures_sorted_list_view (Mysl);
puts("retrait des 3 premiers elements :");
fsm_measures_sorted_list_pop (&Mysl);
fsm_measures_sorted_list_pop (&Mysl);
fsm_measures_sorted_list_pop (&Mysl);
fsm_measures_sorted_list_view (Mysl);
puts("ajout des 3 elements (8, 1, 6) :");
fsm_measures_sorted_list_insert (&Mysl,8);
fsm_measures_sorted_list_insert (&Mysl,1);
fsm_measures_sorted_list_insert (&Mysl,6);
fsm_measures_sorted_list_view (Mysl);
fsm_measures_sorted_list_clear (&Mysl);
printf("clear()\n> nombre d'éléments restant = %d\n\n",
fsm_measures_sorted_list_length(Mysl));
}

View File

@ -365,8 +365,9 @@ void on_situations_box_do_reset (GtkWidget *btt_reset, GtkScrollbar *reset_scrol
void on_clicked_topbar_right_measure (GtkWidget *btt, gpointer data)
{
gtk_window_set_child (GTK_WINDOW (widget_get_main_window ()),
GTK_WIDGET (widget_get_measure_page()));
fsm_measures_sorted_list_test();
// gtk_window_set_child (GTK_WINDOW (widget_get_main_window ()),
// GTK_WIDGET (widget_get_measure_page()));
}
void on_start_new_measure (GtkWidget *btt, gpointer data)