in fsm/measure creation of : manage.c, tool_list.c, flow_list.c et disp_list.c

This commit is contained in:
Jean Sirmai 2024-08-28 16:52:16 +02:00
parent 571e247fd8
commit 6877d4fea2
Signed by: jean
GPG Key ID: FB3115C340E057E3
6 changed files with 218 additions and 105 deletions

View File

@ -48,7 +48,9 @@ enum fsm_measure_type {DATE_RULE_EXEC, RULE_EXEC_NB, OBJECT_NB, ELAPSED_TIME };
#define n_objects 32 // arbitrary too, #define n_objects 32 // arbitrary too,
#define n_situations 128 // and so on... #define n_situations 128 // and so on...
typedef struct measure_list {int value; struct measure_list *suiv;} measure_list ; typedef struct tool_list {int value; struct tool_list *suiv;} tool_list ;
typedef struct flow_list {int value; struct flow_list *suiv;} flow_list ;
typedef struct disp_list {int value; struct disp_list *suiv;} disp_list ;
void fsm_init(); // def: fsm/dispatch; call: main; void fsm_init(); // def: fsm/dispatch; call: main;
void fsm_preferences_init(); // def: fsm/prefer; call: fsm/dispatch; void fsm_preferences_init(); // def: fsm/prefer; call: fsm/dispatch;
@ -85,10 +87,10 @@ void fsm_debug_msg (int choice, int value, char *string, int sub_automaton);
// fsm/result; // fsm/result;
// --------------------------------------------------------------- WIP // --------------------------------------------------------------- WIP
// def: measure/list call measure/list (following functions...) // def: measure/tool_list call measure/tool_list (about the following functions...)
void fsm_measures_sorted_list_insert (measure_list **sl, int value); void fsm_tools_sort_list_insert (tool_list **tl, int value);
int fsm_measures_sorted_list_pop (measure_list **sl); int fsm_tools_sort_list_pop (tool_list **tl);
int fsm_measures_sorted_list_length (measure_list *sl); int fsm_tools_sort_list_length (tool_list *tl);
void fsm_measures_sorted_list_clear (measure_list **sl); void fsm_tools_sort_list_clear (tool_list **tl);
void fsm_measures_sorted_list_view (measure_list *sl); void fsm_tools_sort_list_view (tool_list *tl);
void fsm_measures_sorted_list_test(); // def: measure/manage; call measure/manage; void fsm_tools_sort_list_test(); // def: measure/manage; call measure/manage;

View File

@ -0,0 +1,44 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Gem-graph client *
* *
* State machine / Measures *
* *
* Copyright © 2024 Libre en Communs <contact@a-lec.org> *
* Copyright © 2024 Adrien Bourmault <neox@a-lec.org> *
* Copyright © 2024 Jean Sirmai <jean@a-lec.org> *
* *
* This file is part of Gem-graph. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Affero General Public License *
* as published by the Free Software Foundation, *
* either version 3 of the License, *
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "../../../include/fsm.h"
/******************************************************************************/
/* An editable list of displayed results is defined and maintained here */
/* (see : fsm/measure/manage.c) */
/* - - - */
/* NB some data may be displayed simultaneously in different pages */
/* ex : pages SYNTH & RESULTS */
/******************************************************************************/

View File

@ -0,0 +1,49 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Gem-graph client *
* *
* State machine / Measures *
* *
* Copyright © 2024 Libre en Communs <contact@a-lec.org> *
* Copyright © 2024 Adrien Bourmault <neox@a-lec.org> *
* Copyright © 2024 Jean Sirmai <jean@a-lec.org> *
* *
* This file is part of Gem-graph. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Affero General Public License *
* as published by the Free Software Foundation, *
* either version 3 of the License, *
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "../../../include/fsm.h"
// data_list or flow_list
// ?
// when does a stream of numbers become data
// ?
/******************************************************************************/
/* An editable list of results is defined and maintained here */
/* and some operations can be performed on them. */
/* (see : fsm/measure/manage.c) */
/* - - - */
/* ex : filter, concat, inverse, scale, correlate, etc. */
/******************************************************************************/

View File

@ -31,85 +31,43 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "../../../include/fsm.h" #include "../../../include/fsm.h"
#include "../../../include/util.h"
/******************************************************************************/ /******************************************************************************/
/* M E A S U R E M E N T S */ /* F R O M M E A S U R E M E N T S T O P R E S E N T A T I O N S */
/* */
/* How should the sequence */
/* from measurements to results presentation */
/* be organized */
/* ? */
/* */
/* (1) create/edit some mesurement tools and/or activate existing ones */
/* (2) apply a mesurement tool to a situation to create a new data flow */
/* and possibly carry out any operations on these results */
/* (3) display (plot) the results and adjust the appearance of the tables */
/* - - - */
/* */
/* As a result, three lists at least */
/* must be created and maintained : */
/* */
/* (1) a mesurement tools list (see : fsm/measure/tool_list.c) */
/* which should mention if the tool is 'active' or 'inactive' */
/* NB each rule ou rues-tree edition may change some items of this list */
/* */
/* (2) a data flows list (see : fsm/measure/flow_list.c) */
/* on which some operations should be performed : */
/* ex : filter, concat, inverse, scale, correlate, etc. */
/* NB each data flow should be maintained in a 'displayable form' */
/* */
/* (3) a displayed data list (see : fsm/measure/disp_list.c) */
/* NB some data may be displayed simultaneously in different pages */
/* ex : SYNTH & RESULTS */
/* */
/* NB these three lists should be stored in the XML model */
/* and restored at the beginning of a new session */
/******************************************************************************/ /******************************************************************************/
// 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 :
// - identifiant (clé) (+/- pointeur vers : date de création, auteur,...)
// - type de mesure
// les 6 items suivants peuvent documenter l'ensemble de toutes les valeurs
// à recueillir pour documenter tous les types de mesure possibles;
// tous ces items ne doivent pas être simultanément complétés
// mais, si un tableau etait utilisé, il y aurait peu de place perdue;
// - pointeur vers le premier groupe de règles (une au moins)
// - pointeur vers un second groupe de règles (une au moins)
// - pointeur vers des objets ou situations (un au moins)
// - pointeur vers un ensemble d'évènements intercurrents
// - date de l'évènement
// - durée entre deux évènements
// - mesure active ? + / -
// - pointeur vers une liste de mesures similaires
// - pointeur vers des données, des représentations de données ?
void fsm_add_measure (char *measure_name) {fsm_debug_msg (2, 0, measure_name, 2);} 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_list_init() {if (1) fsm_tools_sort_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

@ -35,6 +35,7 @@
/******************************************************************************/ /******************************************************************************/
/* An editable list of measurements is defined and maintained here */ /* An editable list of measurements is defined and maintained here */
/* (see : fsm/measure/manage.c) */
/* - - - */ /* - - - */
/* Each possible measurement can be activated or silenced */ /* Each possible measurement can be activated or silenced */
/* - - - */ /* - - - */
@ -44,40 +45,39 @@
/* - the time (date) of the event, */ /* - the time (date) of the event, */
/* - the time elapsed between two events, */ /* - the time elapsed between two events, */
/* - the occurrence of events C between events A and B, */ /* - the occurrence of events C between events A and B, */
/* */ /* NB This list is non limitative. ex : 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" doit comporter :
// structure de données : chaque "item" comportera : //
// - identifiant (clé) (+/- pointeur vers : date de création, auteur,...) // - identifiant (clé) (+/- pointeur vers : date de création, auteur,...)
//
// - type de mesure // - type de mesure
// les 6 items suivants peuvent documenter l'ensemble de toutes les valeurs // les 6 items suivants peuvent documenter l'ensemble de toutes les valeurs
// à recueillir pour documenter tous les types de mesure possibles; // à recueillir pour documenter tous les types de mesure possibles;
// tous ces items ne doivent pas être simultanément complétés // tous ces items ne doivent pas être simultanément complétés
// mais, si un tableau etait utilisé, il y aurait peu de place perdue; // mais, si un tableau etait utilisé, il y aurait peu de place perdue;
//
// - pointeur vers le premier groupe de règles (une au moins) // - pointeur vers le premier groupe de règles (une au moins)
// - pointeur vers un second groupe de règles (une au moins) // - pointeur vers un second groupe de règles (une au moins)
// - pointeur vers des objets ou situations (un au moins) // - pointeur vers des objets ou situations (un au moins)
// - pointeur vers un ensemble d'évènements intercurrents // - pointeur vers un ensemble d'évènements intercurrents
// - date de l'évènement // - date de l'évènement
// - durée entre deux évènements // - durée entre deux évènements
//
// - mesure active ? + / - // - mesure active ? + / -
// - pointeur vers une liste de mesures similaires // - pointeur vers une liste de mesures similaires
// - pointeur vers des données, des représentations de données ? // - pointeur vers des données, des représentations de données ?
//------------------------------------------------------------------------------
void fsm_measures_sorted_list_insert (measure_list **ml, int value)
void fsm_tools_sort_list_insert (tool_list **ml, int value)
{ {
measure_list *tmp = NULL; tool_list *tmp = NULL;
measure_list *cml = *ml; tool_list *cml = *ml;
measure_list *elem = malloc (sizeof (measure_list)); tool_list *elem = malloc (sizeof (tool_list));
if (!elem) exit (EXIT_FAILURE); if (!elem) exit (EXIT_FAILURE);
elem->value = value; elem->value = value;
while (cml && cml->value < value) while (cml && cml->value < value)
@ -90,10 +90,10 @@ void fsm_measures_sorted_list_insert (measure_list **ml, int value)
else *ml = elem; else *ml = elem;
} }
int fsm_measures_sorted_list_pop (measure_list **ml) int fsm_tools_sort_list_pop (tool_list **ml)
{ {
int value; int value;
measure_list *tmp; tool_list *tmp;
if (! *ml) return -1; if (! *ml) return -1;
tmp = (*ml)->suiv; tmp = (*ml)->suiv;
value = (*ml)->value; value = (*ml)->value;
@ -103,7 +103,7 @@ int fsm_measures_sorted_list_pop (measure_list **ml)
return value; return value;
} }
int fsm_measures_sorted_list_length (measure_list *ml) int fsm_tools_sort_list_length (tool_list *ml)
{ {
int n = 0; int n = 0;
while (ml) while (ml)
@ -114,9 +114,9 @@ int fsm_measures_sorted_list_length (measure_list *ml)
return n; return n;
} }
void fsm_measures_sorted_list_clear (measure_list **ml) void fsm_tools_sort_list_clear (tool_list **ml)
{ {
measure_list *tmp; tool_list *tmp;
while (*ml) while (*ml)
{ {
tmp = (*ml)->suiv; tmp = (*ml)->suiv;
@ -125,10 +125,10 @@ void fsm_measures_sorted_list_clear (measure_list **ml)
} }
} }
void fsm_measures_sorted_list_view (measure_list *ml) void fsm_tools_sort_list_view (tool_list *ml)
{ {
printf ("-------- view measures list (n = %d)\n", printf ("-------- view measures list (n = %d)\n",
fsm_measures_sorted_list_length (ml)); fsm_tools_sort_list_length (ml));
while(ml) while(ml)
{ {
printf("%d\n", ml->value); printf("%d\n", ml->value);
@ -137,3 +137,63 @@ void fsm_measures_sorted_list_view (measure_list *ml)
puts ("--------------"); puts ("--------------");
} }
void fsm_tools_sort_list_test()
{
tool_list *ex_tool = NULL;
puts("\ncréation d'une liste de 10 elements :");
fsm_tools_sort_list_insert (&ex_tool,9);
fsm_tools_sort_list_insert (&ex_tool,-8);
fsm_tools_sort_list_insert (&ex_tool,3);
fsm_tools_sort_list_insert (&ex_tool,5);
fsm_tools_sort_list_insert (&ex_tool,-1);
fsm_tools_sort_list_insert (&ex_tool,4);
fsm_tools_sort_list_insert (&ex_tool,-6);
fsm_tools_sort_list_insert (&ex_tool,2);
fsm_tools_sort_list_insert (&ex_tool,0);
fsm_tools_sort_list_insert (&ex_tool,7);
fsm_tools_sort_list_view (ex_tool);
puts("retrait des 3 premiers elements :");
fsm_tools_sort_list_pop (&ex_tool);
fsm_tools_sort_list_pop (&ex_tool);
fsm_tools_sort_list_pop (&ex_tool);
fsm_tools_sort_list_view (ex_tool);
puts("ajout des 3 elements (8, 1, 6) :");
fsm_tools_sort_list_insert (&ex_tool,8);
fsm_tools_sort_list_insert (&ex_tool,1);
fsm_tools_sort_list_insert (&ex_tool,6);
fsm_tools_sort_list_view (ex_tool);
fsm_tools_sort_list_clear (&ex_tool);
printf("clear()\n> nombre d'éléments restant = %d\n\n",
fsm_tools_sort_list_length(ex_tool));
}

View File

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