xref: /Universal-ctags/main/ptrarray.h (revision e460488f00fcd2a1ae16ca014e25843045fd7ea1)
1d6067f18SJiří Techet /*
2d6067f18SJiří Techet *   Copyright (c) 1999-2002, Darren Hiebert
3d6067f18SJiří Techet *
4d6067f18SJiří Techet *   This source code is released for free distribution under the terms of the
5d6067f18SJiří Techet *   GNU General Public License version 2 or (at your option) any later version.
6d6067f18SJiří Techet *
7d6067f18SJiří Techet *   Defines external interface to resizable pointer arrays.
8d6067f18SJiří Techet */
9d6067f18SJiří Techet #ifndef CTAGS_MAIN_PTRARRAY_H
10d6067f18SJiří Techet #define CTAGS_MAIN_PTRARRAY_H
11d6067f18SJiří Techet 
12d6067f18SJiří Techet /*
13d6067f18SJiří Techet *   INCLUDE FILES
14d6067f18SJiří Techet */
15d6067f18SJiří Techet #include "general.h"  /* must always come first */
16f60f4e0bSMasatake YAMATO #include "types.h"
17d6067f18SJiří Techet 
18d6067f18SJiří Techet /*
19d6067f18SJiří Techet *   DATA DECLARATIONS
20d6067f18SJiří Techet */
213b6b66a2SMasatake YAMATO struct sPtrArray;
223b6b66a2SMasatake YAMATO typedef struct sPtrArray ptrArray;
23d6067f18SJiří Techet 
24d6067f18SJiří Techet typedef void (*ptrArrayDeleteFunc) (void *data);
25d6067f18SJiří Techet 
26d6067f18SJiří Techet 
27d6067f18SJiří Techet /*
28d6067f18SJiří Techet *   FUNCTION PROTOTYPES
29d6067f18SJiří Techet */
30d6067f18SJiří Techet 
31d6067f18SJiří Techet extern ptrArray *ptrArrayNew (ptrArrayDeleteFunc deleteFunc);
32b47ea137SMasatake YAMATO extern unsigned int ptrArrayAdd (ptrArray *const current, void *ptr);
33*e460488fSMasatake YAMATO extern bool ptrArrayUpdate (ptrArray *const current, unsigned int indx, void *ptr, void *padding);
3483463ee4SMasatake YAMATO extern void *ptrArrayRemoveLast (ptrArray *const current);
3569043684SMasatake YAMATO #define ptrArrayDeleteLast(A) ptrArrayDeleteLastInBatch(A, 1)
3669043684SMasatake YAMATO extern void  ptrArrayDeleteLastInBatch (ptrArray *const current, unsigned int count);
37d6067f18SJiří Techet extern void ptrArrayCombine (ptrArray *const current, ptrArray *const from);
38d6067f18SJiří Techet extern void ptrArrayClear (ptrArray *const current);
39d6067f18SJiří Techet extern unsigned int ptrArrayCount (const ptrArray *const current);
40379eab4eSMasatake YAMATO #define ptrArrayIsEmpty(A) (ptrArrayCount(A) == 0)
41d6067f18SJiří Techet extern void* ptrArrayItem (const ptrArray *const current, const unsigned int indx);
42f3291056SMasatake YAMATO extern void* ptrArrayItemFromLast (const ptrArray *const current, const unsigned int indx);
43f3291056SMasatake YAMATO #define ptrArrayLast(A) ptrArrayItemFromLast(A, 0)
44d6067f18SJiří Techet extern void ptrArrayDelete (ptrArray *const current);
45d6067f18SJiří Techet extern bool ptrArrayHasTest (const ptrArray *const current,
46d6067f18SJiří Techet 				  bool (*test)(const void *ptr, void *userData),
47d6067f18SJiří Techet 				  void *userData);
48bb751a13SMasatake YAMATO extern bool ptrArrayHas (const ptrArray *const current, void *ptr);
49d6067f18SJiří Techet extern void ptrArrayReverse (const ptrArray *const current);
50d6067f18SJiří Techet extern void ptrArrayDeleteItem (ptrArray* const current, unsigned int indx);
519150e789SMasatake YAMATO extern void*ptrArrayRemoveItem (ptrArray* const current, unsigned int indx);
529150e789SMasatake YAMATO extern void ptrArrayInsertItem (ptrArray* const current, unsigned int indx, void *ptr);
53d6067f18SJiří Techet 
54ad9b42bfSMasatake YAMATO extern void ptrArraySort (ptrArray *const current, int (*compare)(const void *, const void *));
55ad9b42bfSMasatake YAMATO 
56d6067f18SJiří Techet #endif  /* CTAGS_MAIN_PTRARRAY_H */
57