WIP: images stack Dois-je gérer les images ? Ou seulement les pointeurs vers les images ?

This commit is contained in:
Jean Sirmai 2024-08-01 15:16:45 +02:00
parent 16d0ea162d
commit 3d47418a1a
Signed by: jean
GPG Key ID: FB3115C340E057E3
3 changed files with 87 additions and 59 deletions

View File

@ -36,7 +36,7 @@
#include <math.h> #include <math.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <stddef.h> /* Defines NULL. */
#include <stdbool.h> #include <stdbool.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>

View File

@ -86,21 +86,6 @@ int widget_get_object_transparency (int i); // top
/******************************************************************************/ /******************************************************************************/
// called in : src/widget/rules/distrib.c // 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_selected_rule();
void *widget_get_rules_left_pane(); void *widget_get_rules_left_pane();
void *widget_get_rules_page(); void *widget_get_rules_page();

View File

@ -33,57 +33,60 @@
#define W_IMAGE_ABSURD 1920 / 32 // 1920 x 960 ad hoc (pour mon écran) #define W_IMAGE_ABSURD 1920 / 32 // 1920 x 960 ad hoc (pour mon écran)
#define H_IMAGE_ABSURD 960 #define H_IMAGE_ABSURD 960
#define MAX_SIZE 255
Stack stack; // -----------------------------------------------------------------------
// Below is ^c^v from RMS C manual
Stack get_stack() {return stack;} //
void set_stack (Stack *stack_new) {stack = *stack_new;} struct intlistlink {int datum; struct intlistlink *next;} babar;
struct intlistlink *my_list = NULL;
// https://www.geeksforgeeks.org/implement-stack-in-c/ struct intlistlink *alloc_intlistlink ()
{
void *get_an_impression_of_what_a_rules_comparator_could_be(){ struct intlistlink *p;
p = malloc (sizeof (struct intlistlink));
GtkBox *compare_left = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); if (p == NULL) printf ("fatal: ran out of storage");
gtk_widget_set_size_request (GTK_WIDGET (compare_left), W_IMAGE_ABSURD, H_IMAGE_ABSURD); p->datum = 0;
p->next = NULL;
GtkBox *compare_right = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); return p;
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;
} }
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; } typedef struct { GtkWidget *arr[MAX_SIZE]; int top; } Stack;
bool isEmpty (Stack *stack) { return stack->top == -1; } static Stack stack_b;
bool isFull (Stack *stack) { return stack->top == MAX_SIZE - 1; } 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; } if (isFull(stack)) { printf("Stack Overflow\n"); return; }
stack->arr[++stack->top] = value; stack->arr[++stack->top] = value;
printf("%d ", stack->top); printf("%d ", stack->top);
} }
GtkWidget *pop (Stack *stack) static GtkWidget *pop (Stack *stack)
{ {
if (isEmpty(stack)) { printf("Stack Underflow\n"); return NULL; } if (isEmpty(stack)) { printf("Stack Underflow\n"); return NULL; }
GtkWidget *popped = stack->arr[stack->top]; GtkWidget *popped = stack->arr[stack->top];
@ -93,12 +96,52 @@ GtkWidget *pop (Stack *stack)
return popped; return popped;
} }
GtkWidget *peek(Stack *stack) static GtkWidget *peek(Stack *stack)
{ {
if (isEmpty(stack)) { printf("Stack is empty\n"); return NULL; } if (isEmpty(stack)) { printf("Stack is empty\n"); return NULL; }
return stack->arr[stack->top]; 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; clock_t start, end;
printf("compare.c push_images_onto_stack() start >> "); printf("compare.c push_images_onto_stack() start >> ");