1 /* $Id$ */
2 /*
3  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20 #ifndef __PJ_ARRAY_H__
21 #define __PJ_ARRAY_H__
22 
23 /**
24  * @file array.h
25  * @brief PJLIB Array helper.
26  */
27 #include <pj/types.h>
28 
29 PJ_BEGIN_DECL
30 
31 /**
32  * @defgroup PJ_ARRAY Array helper.
33  * @ingroup PJ_DS
34  * @{
35  *
36  * This module provides helper to manipulate array of elements of any size.
37  * It provides most used array operations such as insert, erase, and search.
38  */
39 
40 /**
41  * Insert value to the array at the given position, and rearrange the
42  * remaining nodes after the position.
43  *
44  * @param array	    the array.
45  * @param elem_size the size of the individual element.
46  * @param count	    the CURRENT number of elements in the array.
47  * @param pos	    the position where the new element is put.
48  * @param value	    the value to copy to the new element.
49  */
50 PJ_DECL(void) pj_array_insert( void *array,
51 			       unsigned elem_size,
52 			       unsigned count,
53 			       unsigned pos,
54 			       const void *value);
55 
56 /**
57  * Erase a value from the array at given position, and rearrange the remaining
58  * elements post the erased element.
59  *
60  * @param array	    the array.
61  * @param elem_size the size of the individual element.
62  * @param count	    the current number of elements in the array.
63  * @param pos	    the index/position to delete.
64  */
65 PJ_DECL(void) pj_array_erase( void *array,
66 			      unsigned elem_size,
67 			      unsigned count,
68 			      unsigned pos);
69 
70 /**
71  * Search the first value in the array according to matching function.
72  *
73  * @param array	    the array.
74  * @param elem_size the individual size of the element.
75  * @param count	    the number of elements.
76  * @param matching  the matching function, which MUST return PJ_SUCCESS if
77  *		    the specified element match.
78  * @param result    the pointer to the value found.
79  *
80  * @return	    PJ_SUCCESS if value is found, otherwise the error code.
81  */
82 PJ_DECL(pj_status_t) pj_array_find(   const void *array,
83 				      unsigned elem_size,
84 				      unsigned count,
85 				      pj_status_t (*matching)(const void *value),
86 				      void **result);
87 
88 /**
89  * @}
90  */
91 
92 PJ_END_DECL
93 
94 
95 #endif	/* __PJ_ARRAY_H__ */
96 
97