|
Packit |
89ede9 |
/*
|
|
Packit |
89ede9 |
* vplist.h
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* generic container to hold a list of pointers to void
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* Version: 1/9/2017
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* Copyright (c) Chris Putnam 2011-2018
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* Source code released under the GPL version 2
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
*/
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
#ifndef VPLIST_H
|
|
Packit |
89ede9 |
#define VPLIST_H
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
#define VPLIST_MEMERR (-1)
|
|
Packit |
89ede9 |
#define VPLIST_OK (0)
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
typedef int vplist_index;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
typedef struct vplist {
|
|
Packit |
89ede9 |
vplist_index n, max;
|
|
Packit |
89ede9 |
void **data;
|
|
Packit |
89ede9 |
} vplist;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
#define vplist_found( vpl, n ) ( n!=-1 )
|
|
Packit |
89ede9 |
#define vplist_notfound( vpl, n ) ( n==-1 )
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
typedef void (*vplist_ptrfree)(void*);
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
vplist * vplist_new( void );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
void vplist_init ( vplist *vpl );
|
|
Packit |
89ede9 |
int vplist_add ( vplist *vpl, void *v );
|
|
Packit |
89ede9 |
int vplist_fill ( vplist *vpl, vplist_index n, void *v );
|
|
Packit |
89ede9 |
int vplist_copy ( vplist *to, vplist *from );
|
|
Packit |
89ede9 |
int vplist_append ( vplist *vpl, vplist *add );
|
|
Packit |
89ede9 |
int vplist_insert_list ( vplist *vpl, vplist_index pos, vplist *add );
|
|
Packit |
89ede9 |
void * vplist_get ( vplist *vpl, vplist_index n );
|
|
Packit |
89ede9 |
void vplist_set ( vplist *vpl, vplist_index n, void *v );
|
|
Packit |
89ede9 |
void vplist_swap ( vplist *vpl, vplist_index n1, vplist_index n2 );
|
|
Packit |
89ede9 |
int vplist_remove ( vplist *vpl, vplist_index n );
|
|
Packit |
89ede9 |
int vplist_removefn ( vplist *vpl, vplist_index n, vplist_ptrfree vpf );
|
|
Packit |
89ede9 |
int vplist_removevp ( vplist *vpl, void *v );
|
|
Packit |
89ede9 |
int vplist_removevpfn ( vplist *vpl, void *v, vplist_ptrfree vpf );
|
|
Packit |
89ede9 |
void vplist_remove_rangefn( vplist *vpl, vplist_index start, vplist_index endplusone, vplist_ptrfree vpf );
|
|
Packit |
89ede9 |
void vplist_remove_range ( vplist *vpl, vplist_index start, vplist_index endplusone );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
vplist_index vplist_find( vplist *vpl, void *v );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
/*
|
|
Packit |
89ede9 |
* vplist_empty does not free space
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* if members require their own free calls, then call vplist_emptyfn()
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* void
|
|
Packit |
89ede9 |
* member_free( void *v )
|
|
Packit |
89ede9 |
* {
|
|
Packit |
89ede9 |
* member *m = ( member * ) v;
|
|
Packit |
89ede9 |
* member_free( m );
|
|
Packit |
89ede9 |
* free( m );
|
|
Packit |
89ede9 |
* }
|
|
Packit |
89ede9 |
* vplist_emptyfn( &vpl, member_free );
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* if members are simply allocated with malloc(), then use free()
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* vplist_emptyfn( &vpl, free );
|
|
Packit |
89ede9 |
*/
|
|
Packit |
89ede9 |
void vplist_empty ( vplist *vpl );
|
|
Packit |
89ede9 |
void vplist_emptyfn( vplist *vpl, vplist_ptrfree fn );
|
|
Packit |
89ede9 |
/*
|
|
Packit |
89ede9 |
* vplist_free frees the space for the data array of void * elements.
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* if members require their own free calls, then call vplist_freefn()
|
|
Packit |
89ede9 |
*/
|
|
Packit |
89ede9 |
void vplist_free ( vplist *vpl );
|
|
Packit |
89ede9 |
void vplist_freefn( vplist *vpl, vplist_ptrfree fn );
|
|
Packit |
89ede9 |
/*
|
|
Packit |
89ede9 |
* vplist_delete does vplist_free and deallocates the struct
|
|
Packit |
89ede9 |
* vplist * and replaces with NULL.
|
|
Packit |
89ede9 |
*/
|
|
Packit |
89ede9 |
void vplist_delete ( vplist **vpl );
|
|
Packit |
89ede9 |
void vplist_deletefn( vplist **vpl, vplist_ptrfree fn );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
#endif
|