From 83085d1435baff0b61860cc647fef5631285f3db Mon Sep 17 00:00:00 2001 From: tTh Date: Sun, 26 Mar 2023 12:44:34 +0200 Subject: [PATCH] first work on edgelists --- bubulles.h | 2 +- edges.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- edges.h | 10 ++++++ tbb.c | 41 +++++++++++++++++++++-- 4 files changed, 143 insertions(+), 6 deletions(-) diff --git a/bubulles.h b/bubulles.h index cb175cf..93f5ebb 100644 --- a/bubulles.h +++ b/bubulles.h @@ -4,7 +4,7 @@ /* --------------------------------------------------------------------- */ -#define LIBBB_VERSION 60 +#define LIBBB_VERSION 61 #define SZ_BUBULLE_TEXT 81 /* arbitrary value */ diff --git a/edges.c b/edges.c index 3ee8758..a2a9f31 100644 --- a/edges.c +++ b/edges.c @@ -3,21 +3,113 @@ */ #include +#include +#include #include "bubulles.h" #include "edges.h" /* --------------------------------------------------------------------- */ -int print_edgelist_desc(EdgeList *list, int k) +EdgeList * alloc_edgelist(char *name, int sz, int flags) +{ +EdgeList *elptr; +AnEdge *array; + +fprintf(stderr, ">>> %s ( '%s' %d 0x%X )\n", __func__, name, sz, flags); + +if (NULL==(elptr = calloc(1, sizeof(EdgeList)))) { + fprintf(stderr, "no mem available in %s\n", __func__); + return NULL; + } +memset(elptr, 0, sizeof(EdgeList)); + +if (NULL==(array = calloc(sz, sizeof(Bubulle)))) { + fprintf(stderr, "no mem available in %s\n", __func__); + free(elptr); + return NULL; + } +elptr->edges = array; + +if ( (NULL != name) && (strlen(name) < SZ_BUBULLE_TEXT) ) + strcpy(elptr->name, name); +else + strcpy(elptr->name, "noname"); + +elptr->magic = 0x55555555; +elptr->size = sz; +elptr->flags = flags; + +return elptr; +} +/* --------------------------------------------------------------------- */ +int free_edgelist(EdgeList *list, int k) { -printf("edgelist addr: %p\n", list); +fprintf(stderr, ">>> %s ( %p 0x%X )\n", __func__, list, k); if (k) { fprintf(stderr, "%s: k must be 0, was %d\n", __func__, k); return k; } +free(list->edges); + +memset(list, 0, sizeof(EdgeList)); +free(list); + +return -1; +} +/* --------------------------------------------------------------------- */ +int push_an_edge(EdgeList *list, int p0, int p1) +{ + +fprintf(stderr, ">>> %s ( %p %d %d )\n", __func__, list, p0, p1); + +if (list->fidx >= list->size) { + fprintf(stderr, "%s: w're doomed, overflow\n", __func__); +#if MUST_ABORT + abort(); +#endif + return -1; + } + +list->edges[list->fidx].A = p0; +list->edges[list->fidx].B = p1; +list->fidx ++; + return 0; } /* --------------------------------------------------------------------- */ +int print_edgelist_desc(EdgeList *list, int k) +{ + +fprintf(stderr, "--- edgelist '%s' at %p\n", list->name, list); + +if (k) { + fprintf(stderr, "%s: k must be 0, was %d\n", __func__, k); + return k; + } + +fprintf(stderr, " array @ %p\n", list->edges); +fprintf(stderr, " size %8d\n", list->size); +fprintf(stderr, " next free %8d\n", list->fidx); +// fprintf(stderr, " magic 0x%08X\n", list->magic); + +return 0; +} +/* --------------------------------------------------------------------- */ +int print_the_edges(EdgeList *list, int k) +{ +int foo; + +if (k) { + fprintf(stderr, "In %s, k must be 0, was %d\n", __func__, k); + return k; + } +for (foo=0; foofidx; foo++) { + printf("%d\t\t%5d %5d\n", foo, list->edges[foo].A, list->edges[foo].B); + } + +return -1; +} +/* --------------------------------------------------------------------- */ diff --git a/edges.h b/edges.h index 0a25548..36bcc8f 100644 --- a/edges.h +++ b/edges.h @@ -9,6 +9,7 @@ typedef struct { } AnEdge; typedef struct { + unsigned long magic; char name[SZ_BUBULLE_TEXT+1]; int size; /* max number of edges */ int fidx; /* next free slot */ @@ -17,3 +18,12 @@ typedef struct { } EdgeList; /* --------------------------------------------------------------------- */ + +EdgeList * alloc_edgelist(char *name, int sz, int flags); +int free_edgelist(EdgeList *list, int k); +int push_an_edge(EdgeList *list, int p0, int p1); + +int print_edgelist_desc(EdgeList *list, int k); +int print_the_edges(EdgeList *list, int k); + +/* --------------------------------------------------------------------- */ diff --git a/tbb.c b/tbb.c index 339bcaf..8dea085 100644 --- a/tbb.c +++ b/tbb.c @@ -8,7 +8,38 @@ #include #include "bubulles.h" +#include "edges.h" +/* --------------------------------------------------------------------- */ +int essai_des_edges(int k) +{ +EdgeList * list; +int foo, idx; + +list = alloc_edgelist("oups?", k, 0); +fprintf(stderr, " alloc edge list -> %p\n", list); + +print_edgelist_desc(list, 0); + +foo = push_an_edge(list, 13, 37); +fprintf(stderr, " push edge -> %d\n", foo); +foo = push_an_edge(list, 24, 36); + +foo = print_the_edges(list, 0); + +for (idx=0; idx<10; idx++) { + foo = push_an_edge(list, idx*7, -idx); + + + } + +foo = print_the_edges(list, 0); + +foo = free_edgelist(list, 0); +fprintf(stderr, " free list -> %d\n", foo); + +return -1; +} /* --------------------------------------------------------------------- */ void test_alloc_free(int nbelm) { @@ -109,16 +140,20 @@ int main(int argc, char *argv[]) { int foo; -printf("*** Bubulles Testing -- %s %s\n\n", __DATE__, __TIME__); +fprintf(stderr, "*** Bubulles Testing %s %s\n\n", __DATE__, __TIME__); -bubulles_version(1); +bubulles_version(0); +#if (0) test_alloc_free(5); test_push_pop(20000); test_cleanfill_my_bublist(999); - foo = test_peek_poke(5000); fprintf(stderr, "test peek/poke -> %d\n", foo); +#endif + +foo = essai_des_edges(10); +fprintf(stderr, "test des edges -> %d\n", foo); return 0; }