xref: /haiku/src/libs/libsolv/solv/bitmap.h (revision f491972ca97c30b7b4ff6cf072de7bb345d58a69)
1*f491972cSAugustin Cavalier /*
2*f491972cSAugustin Cavalier  * Copyright (c) 2007-2011, Novell Inc.
3*f491972cSAugustin Cavalier  *
4*f491972cSAugustin Cavalier  * This program is licensed under the BSD license, read LICENSE.BSD
5*f491972cSAugustin Cavalier  * for further information
6*f491972cSAugustin Cavalier  */
7*f491972cSAugustin Cavalier 
8*f491972cSAugustin Cavalier /*
9*f491972cSAugustin Cavalier  * bitmap.h
10*f491972cSAugustin Cavalier  *
11*f491972cSAugustin Cavalier  */
12*f491972cSAugustin Cavalier 
13*f491972cSAugustin Cavalier #ifndef LIBSOLV_BITMAP_H
14*f491972cSAugustin Cavalier #define LIBSOLV_BITMAP_H
15*f491972cSAugustin Cavalier 
16*f491972cSAugustin Cavalier #include <string.h>
17*f491972cSAugustin Cavalier 
18*f491972cSAugustin Cavalier #ifdef __cplusplus
19*f491972cSAugustin Cavalier extern "C" {
20*f491972cSAugustin Cavalier #endif
21*f491972cSAugustin Cavalier 
22*f491972cSAugustin Cavalier typedef struct _Map {
23*f491972cSAugustin Cavalier   unsigned char *map;
24*f491972cSAugustin Cavalier   int size;
25*f491972cSAugustin Cavalier } Map;
26*f491972cSAugustin Cavalier 
27*f491972cSAugustin Cavalier #define MAPZERO(m) (memset((m)->map, 0, (m)->size))
28*f491972cSAugustin Cavalier /* set all bits */
29*f491972cSAugustin Cavalier #define MAPSETALL(m) (memset((m)->map, 0xff, (m)->size))
30*f491972cSAugustin Cavalier /* set bit */
31*f491972cSAugustin Cavalier #define MAPSET(m, n) ((m)->map[(n) >> 3] |= 1 << ((n) & 7))
32*f491972cSAugustin Cavalier /* clear bit */
33*f491972cSAugustin Cavalier #define MAPCLR(m, n) ((m)->map[(n) >> 3] &= ~(1 << ((n) & 7)))
34*f491972cSAugustin Cavalier /* test bit */
35*f491972cSAugustin Cavalier #define MAPTST(m, n) ((m)->map[(n) >> 3] & (1 << ((n) & 7)))
36*f491972cSAugustin Cavalier 
37*f491972cSAugustin Cavalier extern void map_init(Map *m, int n);
38*f491972cSAugustin Cavalier extern void map_init_clone(Map *t, Map *s);
39*f491972cSAugustin Cavalier extern void map_grow(Map *m, int n);
40*f491972cSAugustin Cavalier extern void map_free(Map *m);
41*f491972cSAugustin Cavalier extern void map_and(Map *t, Map *s);
42*f491972cSAugustin Cavalier extern void map_or(Map *t, Map *s);
43*f491972cSAugustin Cavalier extern void map_subtract(Map *t, Map *s);
44*f491972cSAugustin Cavalier 
map_empty(Map * m)45*f491972cSAugustin Cavalier static inline void map_empty(Map *m)
46*f491972cSAugustin Cavalier {
47*f491972cSAugustin Cavalier   MAPZERO(m);
48*f491972cSAugustin Cavalier }
map_set(Map * m,int n)49*f491972cSAugustin Cavalier static inline void map_set(Map *m, int n)
50*f491972cSAugustin Cavalier {
51*f491972cSAugustin Cavalier   MAPSET(m, n);
52*f491972cSAugustin Cavalier }
map_setall(Map * m)53*f491972cSAugustin Cavalier static inline void map_setall(Map *m)
54*f491972cSAugustin Cavalier {
55*f491972cSAugustin Cavalier   MAPSETALL(m);
56*f491972cSAugustin Cavalier }
map_clr(Map * m,int n)57*f491972cSAugustin Cavalier static inline void map_clr(Map *m, int n)
58*f491972cSAugustin Cavalier {
59*f491972cSAugustin Cavalier   MAPCLR(m, n);
60*f491972cSAugustin Cavalier }
map_tst(Map * m,int n)61*f491972cSAugustin Cavalier static inline int map_tst(Map *m, int n)
62*f491972cSAugustin Cavalier {
63*f491972cSAugustin Cavalier   return MAPTST(m, n);
64*f491972cSAugustin Cavalier }
65*f491972cSAugustin Cavalier 
66*f491972cSAugustin Cavalier #ifdef __cplusplus
67*f491972cSAugustin Cavalier }
68*f491972cSAugustin Cavalier #endif
69*f491972cSAugustin Cavalier 
70*f491972cSAugustin Cavalier #endif /* LIBSOLV_BITMAP_H */
71