From 3d47418a1a6cae5704c5b0d845df0bd554b6ebed Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Thu, 1 Aug 2024 15:16:45 +0200 Subject: [PATCH] =?UTF-8?q?WIP:=20images=20stack=20=20=20Dois-je=20g=C3=A9?= =?UTF-8?q?rer=20les=20images=20=3F=20Ou=20seulement=20les=20pointeurs=20v?= =?UTF-8?q?ers=20les=20images=20=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/base.h | 2 +- include/widget.h | 15 --- src/widget/rules/tree_tools/compare.c | 129 +++++++++++++++++--------- 3 files changed, 87 insertions(+), 59 deletions(-) diff --git a/include/base.h b/include/base.h index 5f3bbe4..744aa22 100644 --- a/include/base.h +++ b/include/base.h @@ -36,7 +36,7 @@ #include #include #include -#include +#include /* Defines NULL. */ #include #include #include diff --git a/include/widget.h b/include/widget.h index 2a61694..c971f47 100644 --- a/include/widget.h +++ b/include/widget.h @@ -86,21 +86,6 @@ int widget_get_object_transparency (int i); // top /******************************************************************************/ // called in : src/widget/rules/distrib.c -// Define a structure for the stack -#define MAX_SIZE 255 -typedef struct { GtkWidget *arr[MAX_SIZE]; int top; } Stack; - -Stack get_stack(); -void set_stack (Stack *stack_new); - -void initialize(Stack *stack); -bool isEmpty(Stack *stack); -bool isFull(Stack *stack); -void push(Stack *stack, GtkWidget *value); -GtkWidget *pop(Stack *stack); -GtkWidget *peek(Stack *stack); -void *push_images_onto_stack(); - void *widget_get_selected_rule(); void *widget_get_rules_left_pane(); void *widget_get_rules_page(); diff --git a/src/widget/rules/tree_tools/compare.c b/src/widget/rules/tree_tools/compare.c index e68e6c5..a0cb673 100644 --- a/src/widget/rules/tree_tools/compare.c +++ b/src/widget/rules/tree_tools/compare.c @@ -33,57 +33,60 @@ #define W_IMAGE_ABSURD 1920 / 32 // 1920 x 960 ad hoc (pour mon écran) #define H_IMAGE_ABSURD 960 +#define MAX_SIZE 255 -Stack stack; - -Stack get_stack() {return stack;} -void set_stack (Stack *stack_new) {stack = *stack_new;} - -// https://www.geeksforgeeks.org/implement-stack-in-c/ - -void *get_an_impression_of_what_a_rules_comparator_could_be(){ - - GtkBox *compare_left = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); - gtk_widget_set_size_request (GTK_WIDGET (compare_left), W_IMAGE_ABSURD, H_IMAGE_ABSURD); - - GtkBox *compare_right = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); - gtk_widget_set_size_request (GTK_WIDGET (compare_right), W_IMAGE_ABSURD, H_IMAGE_ABSURD); - - initialize(&stack); - - push_images_onto_stack (stack); - - push(&stack, GTK_WIDGET (gtk_picture_new_for_filename - ("/home/jean/Gem-Graph/gem-graph-client/data/image/ATP.png"))); - push(&stack, GTK_WIDGET (gtk_picture_new_for_filename - ("/home/jean/Gem-Graph/gem-graph-client/data/image/ADP.png"))); - push(&stack, GTK_WIDGET (gtk_picture_new_for_filename - ("/home/jean/Gem-Graph/gem-graph-client/data/image/AMP.png"))); - - gtk_box_append (compare_left, pop(&stack)); - gtk_box_append (compare_left, pop(&stack)); - gtk_box_append (compare_left, pop(&stack)); -// gtk_box_append (compare_left, pop(&stack)); - - GtkBox *comparator = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); - gtk_box_append (comparator, GTK_WIDGET (compare_left)); - gtk_box_append (comparator, GTK_WIDGET (compare_right)); - - return comparator; +// ----------------------------------------------------------------------- +// Below is ^c^v from RMS C manual +// +struct intlistlink {int datum; struct intlistlink *next;} babar; +struct intlistlink *my_list = NULL; +struct intlistlink *alloc_intlistlink () +{ + struct intlistlink *p; + p = malloc (sizeof (struct intlistlink)); + if (p == NULL) printf ("fatal: ran out of storage"); + p->datum = 0; + p->next = NULL; + return p; } +void add_to_mylist (int my_int) +{ + struct intlistlink *p = alloc_intlistlink (); + p->datum = my_int; + p->next = my_list; + my_list = p; +} +void free_intlist (struct intlistlink *p) +{ + while (p) + { + struct intlistlink *q = p; + p = p->next; + free (q); + } +} +// TODO free_intlist (mylist); +// TODO mylist = NULL; +// TODO offsetof (type, field) +// +// +// ----------------------------------------------------------------------- +// Below is ^c^v from https://www.geeksforgeeks.org/implement-stack-in-c/ -void initialize (Stack *stack) { stack->top = -1; } -bool isEmpty (Stack *stack) { return stack->top == -1; } -bool isFull (Stack *stack) { return stack->top == MAX_SIZE - 1; } +typedef struct { GtkWidget *arr[MAX_SIZE]; int top; } Stack; +static Stack stack_b; +static void initialize (Stack *stack) { stack->top = -1; } +static bool isEmpty (Stack *stack) { return stack->top == -1; } +static bool isFull (Stack *stack) { return stack->top == MAX_SIZE - 1; } -void push (Stack *stack, GtkWidget *value) +static void push (Stack *stack, GtkWidget *value) { if (isFull(stack)) { printf("Stack Overflow\n"); return; } stack->arr[++stack->top] = value; printf("%d ", stack->top); } -GtkWidget *pop (Stack *stack) +static GtkWidget *pop (Stack *stack) { if (isEmpty(stack)) { printf("Stack Underflow\n"); return NULL; } GtkWidget *popped = stack->arr[stack->top]; @@ -93,12 +96,52 @@ GtkWidget *pop (Stack *stack) return popped; } -GtkWidget *peek(Stack *stack) +static GtkWidget *peek(Stack *stack) { if (isEmpty(stack)) { printf("Stack is empty\n"); return NULL; } return stack->arr[stack->top]; } +// ----------------------------------------------------------- +// confrontation of both examples and methods + +static void *push_images_onto_stack (Stack stack_b); + +void *get_an_impression_of_what_a_rules_comparator_could_be(){ + + GtkBox *compare_left = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); + gtk_widget_set_size_request (GTK_WIDGET (compare_left), W_IMAGE_ABSURD, H_IMAGE_ABSURD); + + GtkBox *compare_right = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); + gtk_widget_set_size_request (GTK_WIDGET (compare_right), W_IMAGE_ABSURD, H_IMAGE_ABSURD); + + initialize(&stack_b); + + push_images_onto_stack (stack_b); + + push(&stack_b, GTK_WIDGET (gtk_picture_new_for_filename + ("/home/jean/Gem-Graph/gem-graph-client/data/image/ATP.png"))); + push(&stack_b, GTK_WIDGET (gtk_picture_new_for_filename + ("/home/jean/Gem-Graph/gem-graph-client/data/image/ADP.png"))); + push(&stack_b, GTK_WIDGET (gtk_picture_new_for_filename + ("/home/jean/Gem-Graph/gem-graph-client/data/image/AMP.png"))); + + printf(" --------- \n");//%d\n", *stack_b->arr[0]); + + peek(&stack_b); +// gtk_box_append (compare_left, peek(&stack_b)); + gtk_box_append (compare_left, pop(&stack_b)); + gtk_box_append (compare_left, pop(&stack_b)); + gtk_box_append (compare_left, pop(&stack_b)); +// gtk_box_append (compare_left, pop(&stack)); + + GtkBox *comparator = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); + gtk_box_append (comparator, GTK_WIDGET (compare_left)); + gtk_box_append (comparator, GTK_WIDGET (compare_right)); + + return comparator; +} + @@ -114,7 +157,7 @@ GtkWidget *peek(Stack *stack) -void *push_images_onto_stack (Stack stack) +static void *push_images_onto_stack (Stack stack) { clock_t start, end; printf("compare.c push_images_onto_stack() start >> ");