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
|
/*
Copyright (c) 2010 NFG Net Facilities Group BV support@nfg.nl
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* ADT interface for Sorted Set
*
* optimized for insertion and removal of items to and from the
* Universe
*/
#ifndef SSET_H
#define SSET_H
#define T Sset_T
typedef struct T *T;
extern T Sset_new(int (*cmp)(const void *, const void *), size_t, void (*free)(void *));
extern int Sset_has(T, const void *);
extern void Sset_add(T, const void *);
extern int Sset_len(T);
extern void Sset_del(T, const void *);
extern void Sset_map(T, int (*func)(void *, void *), void *);
extern void Sset_free(T *);
extern T Sset_or(T, T); // a + b
extern T Sset_and(T, T); // a * b
extern T Sset_not(T, T); // a - b
extern T Sset_xor(T, T); // a / b
#undef T
#endif
|