bitmap: implement map_and and MAPSETALL
[platform/upstream/libsolv.git] / src / bitmap.h
index 2f24176..3bad3c3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, Novell Inc.
+ * Copyright (c) 2007-2011, Novell Inc.
  *
  * This program is licensed under the BSD license, read LICENSE.BSD
  * for further information
@@ -7,11 +7,13 @@
 
 /*
  * bitmap.h
- * 
+ *
  */
 
-#ifndef BITMAP_H
-#define BITMAP_H
+#ifndef LIBSOLV_BITMAP_H
+#define LIBSOLV_BITMAP_H
+
+#include <string.h>
 
 typedef struct _Map {
   unsigned char *map;
@@ -19,12 +21,36 @@ typedef struct _Map {
 } Map;
 
 #define MAPZERO(m) (memset((m)->map, 0, (m)->size))
-#define MAPSET(m, n) ((m)->map[(n) >> 3] |= 1 << ((n) & 7)) // Set Bit
-#define MAPCLR(m, n) ((m)->map[(n) >> 3] &= ~(1 << ((n) & 7))) // Reset Bit
-#define MAPTST(m, n) ((m)->map[(n) >> 3] & (1 << ((n) & 7))) // Test Bit
+/* set all bits */
+#define MAPSETALL(m) (memset((m)->map, 0xff, (m)->size))
+/* set bit */
+#define MAPSET(m, n) ((m)->map[(n) >> 3] |= 1 << ((n) & 7))
+/* clear bit */
+#define MAPCLR(m, n) ((m)->map[(n) >> 3] &= ~(1 << ((n) & 7)))
+/* test bit */
+#define MAPTST(m, n) ((m)->map[(n) >> 3] & (1 << ((n) & 7)))
 
 extern void map_init(Map *m, int n);
+extern void map_init_clone(Map *t, Map *s);
+extern void map_grow(Map *m, int n);
 extern void map_free(Map *m);
-extern void map_clone(Map *t, Map *s);
+extern void map_and(Map *t, Map *s);
+
+static inline void map_empty(Map *m)
+{
+  MAPZERO(m);
+}
+static inline void map_set(Map *m, int n)
+{
+  MAPSET(m, n);
+}
+static inline void map_clr(Map *m, int n)
+{
+  MAPCLR(m, n);
+}
+static inline int map_tst(Map *m, int n)
+{
+  return MAPTST(m, n);
+}
 
-#endif /* BITMAP_H */
+#endif /* LIBSOLV_BITMAP_H */