first work on edgelists

This commit is contained in:
tTh 2023-03-26 12:44:34 +02:00
parent 39b123c641
commit 83085d1435
4 changed files with 143 additions and 6 deletions

View File

@ -4,7 +4,7 @@
/* --------------------------------------------------------------------- */
#define LIBBB_VERSION 60
#define LIBBB_VERSION 61
#define SZ_BUBULLE_TEXT 81 /* arbitrary value */

96
edges.c
View File

@ -3,21 +3,113 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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; foo<list->fidx; foo++) {
printf("%d\t\t%5d %5d\n", foo, list->edges[foo].A, list->edges[foo].B);
}
return -1;
}
/* --------------------------------------------------------------------- */

10
edges.h
View File

@ -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);
/* --------------------------------------------------------------------- */

41
tbb.c
View File

@ -8,7 +8,38 @@
#include <stdlib.h>
#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;
}