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