aboutsummaryrefslogtreecommitdiff
path: root/src/PtrList.h
blob: 60f3fafe99a47d66f22a4b5b6d7a2ce388ae2b0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef __PTRLIST_HH__
#define __PTRLIST_HH__

#include <stddef.h>

typedef enum { PLFALSE, PLTRUE } PLBOOL;

typedef struct PtrList_tag PtrList;

#ifdef __cplusplus
extern "C"
{
#endif
				/* Creation and deletion */
PtrList *	List_New( void );
PtrList *	List_NewWithPageSize( size_t pagesize );
PtrList *	List_MakeCopy( const PtrList * other );
void		List_Delete( PtrList * );
				/* Counts the items */
size_t		List_NumberOfItems( const PtrList * );
				/* Item accessors */
void *		List_Item( const PtrList *, size_t index );
void		List_SetItem( PtrList *, size_t index, void * ptr );
				/* List manipulation */
void		List_Append( PtrList *, void * item );
void		List_Insert( PtrList *, size_t index, void * item );
void *		List_RemoveItem( PtrList *, size_t index );
void		List_SwapItems( PtrList *, size_t a_index, size_t b_index );
				/* Actions on pointer of particular value */
void		List_Remove( PtrList *, void * item );
PLBOOL		List_GetIndexOf( const PtrList *, const void * item,
				size_t * index );
				/* Remove all items from list */
void		List_Empty( PtrList * list );
				/* Copy another list */
void		List_CopyList( PtrList * list, const PtrList * other );
				/* Special freeing utility */
void		List_FreeItemsInListAndEmpty( PtrList * );
				/* Sort and Search */
typedef int	(*ListSortComparison)( const void *, const void * );

void		List_SortAccordingTo( PtrList *, ListSortComparison );

typedef PLBOOL	(*ListCondition)( const void * );

void *		List_FirstItemSuchThat( const PtrList *, ListCondition  );
PLBOOL		List_FindFirstIndexSuchThat( const PtrList *,
				ListCondition condition, size_t * index );
#ifdef __cplusplus
}
#endif

#endif