gnu99 to c99 (not compiler dependent) produces a warning for mkstemp
[anf2cnf:anf2cnf.git] / libdatastruct.h
1 /* Copyright (C) 2010, 2011 Luk Bettale
2
3    This program is free software: you can redistribute it and/or
4    modify it under the terms of the GNU General Public License as
5    published by the Free Software Foundation, either version 3 of the
6    License, or (at your option) any later version.
7
8    This program is distributed in the hope that it will be useful, but
9    WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11    General Public License for more details.
12
13    You should have received a copy of the GNU General Public License
14    along with this program. If not, see
15    <http://www.gnu.org/licenses/>. */
16
17 #ifndef LIBDATASTRUCT_H
18 #define LIBDATASTRUCT_H
19
20 #include <stdlib.h>
21 #include <stdbool.h>
22
23 typedef struct _vector vector;
24
25 vector *vector_alloc (unsigned int capacity);
26 void vector_resize (vector *v, unsigned int capacity);
27 void vector_add (vector *v, void *elt);
28 void *vector_at (vector *v, unsigned int index);
29 void *vector_contains (const vector *v, const void *elt,
30                        bool elt_equal (const void *, const void *));
31 int vector_index (vector *v, void *elt,
32                   bool elt_equal (const void *, const void *));
33 void vector_free (vector *v, void elt_free (const void *));
34
35 typedef struct _list list;
36
37 list *list_alloc ();
38 void list_add (list *l, void *elt);
39 void *list_contains (const list *l, const void *elt,
40                      bool elt_equal (const void *, const void *));
41 void list_free (list *l, void elt_free (void *));
42
43 typedef struct _hashmap hashmap;
44
45 hashmap *hashmap_alloc (unsigned int size);
46 void hashmap_add (hashmap *hmap, void *elt, unsigned int h);
47 void *hashmap_contains (const hashmap *hmap, const void *elt, unsigned int h,
48                         bool elt_equal (const void *, const void *));
49 void hashmap_free (hashmap *hmap, void elt_free (void *));
50
51 typedef struct _iterator iterator;
52
53 void *iterator_next (iterator *iter);
54 bool iterator_has_next (iterator *iter);
55 void iterator_free (iterator *iter);
56
57 iterator *list_iterator (list *l);
58 iterator *hashmap_iterator (hashmap *hmap);
59
60 #endif  /* LIBDATASTRUCT_H */