/[public]/psiconv/trunk/lib/psiconv/list.h
ViewVC logotype

Diff of /psiconv/trunk/lib/psiconv/list.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 61 Revision 62
34/* No need to export the actual internal format */ 34/* No need to export the actual internal format */
35typedef struct psiconv_list_s *psiconv_list; 35typedef struct psiconv_list_s *psiconv_list;
36 36
37/* Before using a list, call list_new. It takes the size of a single element 37/* Before using a list, call list_new. It takes the size of a single element
38 as its argument. Always compute it with a sizeof() expression, just to be 38 as its argument. Always compute it with a sizeof() expression, just to be
39 safe. The returned list is empty. */ 39 safe. The returned list is empty.
40 If there is not enough memory available, NULL is returned. You should
41 always test for this explicitely, because the other functions do not
42 like a psiconv_list argument that is equal to NULL */
40extern psiconv_list psiconv_list_new(int element_size); 43extern psiconv_list psiconv_list_new(int element_size);
41 44
42/* This frees the list. If elements contain pointers that need to be freed 45/* This frees the list. If elements contain pointers that need to be freed
43 separately, call list_free_el below. */ 46 separately, call list_free_el below. */
44extern void psiconv_list_free(psiconv_list l); 47extern void psiconv_list_free(psiconv_list l);
54/* Return 1 if the list is empty, 0 if not */ 57/* Return 1 if the list is empty, 0 if not */
55extern int psiconv_list_is_empty(const psiconv_list l); 58extern int psiconv_list_is_empty(const psiconv_list l);
56 59
57/* Get an element from the list, and return a pointer to it. Note: you can 60/* Get an element from the list, and return a pointer to it. Note: you can
58 directly modify this element, but be careful not to write beyond the 61 directly modify this element, but be careful not to write beyond the
59 element memory space. */ 62 element memory space.
63 If indx is out of range, NULL is returned. */
60extern void * psiconv_list_get(const psiconv_list l, unsigned int indx); 64extern void * psiconv_list_get(const psiconv_list l, unsigned int indx);
61 65
62/* Add an element at the end of the list. The element is copied from the 66/* Add an element at the end of the list. The element is copied from the
63 supplied element. Of course, this does not help if the element contains 67 supplied element. Of course, this does not help if the element contains
64 pointers. */ 68 pointers.
69 As the lists extends itself, it may be necessary to allocate new
70 memory. If this fails, a negative error-code is returned. If everything,
71 succeeds, 0 is returned. */
65extern void psiconv_list_add(psiconv_list l, void *el); 72extern int psiconv_list_add(psiconv_list l, void *el);
66 73
67/* Do some action for each element. Note: you can directly modify the 74/* Do some action for each element. Note: you can directly modify the
68 elements supplied to action, and they will be changed in the list, 75 elements supplied to action, and they will be changed in the list,
69 but never try a free(el)! */ 76 but never try a free(el)! */
70extern void psiconv_list_foreach_el(psiconv_list l, void action(void *el)); 77extern void psiconv_list_foreach_el(psiconv_list l, void action(void *el));
71 78
72/* Clone the list, that is, copy it. If elements contain pointers, you 79/* Clone the list, that is, copy it. If elements contain pointers, you
73 should call the next routine. */ 80 should call the next routine. If not enough memory is available,
81 NULL is returned. */
74extern psiconv_list psiconv_list_clone(const psiconv_list l); 82extern psiconv_list psiconv_list_clone(const psiconv_list l);
75
76/* Clone the list. For each element, clone_el is called. The elements which
77 are given to clone_el must be modified in place, as needed. */
78extern psiconv_list psiconv_list_clone_el(const psiconv_list l,
79 void clone_el(void *el));
80 83
81/* Read upto size_t elements from file f, and put them at the end of list l. 84/* Read upto size_t elements from file f, and put them at the end of list l.
82 Returned is the actual number of elements added. This assumes the file 85 Returned is the actual number of elements added. This assumes the file
83 layout and the memory layout of elements is the same. */ 86 layout and the memory layout of elements is the same. Note that if
87 not enough memory could be allocated, 0 is simply returned. */
84extern size_t psiconv_list_fread(psiconv_list l,size_t size, FILE *f); 88extern size_t psiconv_list_fread(psiconv_list l,size_t size, FILE *f);
89
85 90
86#ifdef __cplusplus 91#ifdef __cplusplus
87} 92}
88#endif /* __cplusplus */ 93#endif /* __cplusplus */
89 94

Legend:
Removed from v.61  
changed lines
  Added in v.62

frodo@frodo.looijaard.name
ViewVC Help
Powered by ViewVC 1.1.26