summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAles Kozumplik <akozumpl@redhat.com>2012-03-27 14:06:42 +0200
committerAles Kozumplik <akozumpl@redhat.com>2012-03-27 14:13:00 +0200
commitfd144ef57517b9cff624d5c8ca11d2bc3f461ed2 (patch)
tree582902cbe70251de23bdd54c394c50780397f8f0
parent28d0d857fec4cc719d7418f94e250b570228ae84 (diff)
downloadlibsolv-fd144ef57517b9cff624d5c8ca11d2bc3f461ed2.tar.gz
libsolv-fd144ef57517b9cff624d5c8ca11d2bc3f461ed2.tar.bz2
libsolv-fd144ef57517b9cff624d5c8ca11d2bc3f461ed2.zip
bitmap: implement map_and_not.
-rw-r--r--src/bitmap.c12
-rw-r--r--src/bitmap.h1
-rw-r--r--src/libsolv.ver1
3 files changed, 14 insertions, 0 deletions
diff --git a/src/bitmap.c b/src/bitmap.c
index 94a88ca..5a8dcd8 100644
--- a/src/bitmap.c
+++ b/src/bitmap.c
@@ -71,4 +71,16 @@ map_and(Map *t, Map *s)
*ti++ &= *si++;
}
+/* like map_and but negates value in s first, i.e. t & ~s */
+void
+map_and_not(Map *t, Map *s)
+{
+ unsigned char *ti, *si, *end;
+ ti = t->map;
+ si = s->map;
+ end = ti + t->size;
+ while (ti < end)
+ *ti++ &= ~*si++;
+}
+
/* EOF */
diff --git a/src/bitmap.h b/src/bitmap.h
index 12257ff..b098b26 100644
--- a/src/bitmap.h
+++ b/src/bitmap.h
@@ -35,6 +35,7 @@ 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_and(Map *t, Map *s);
+extern void map_and_not(Map *t, Map *s);
static inline void map_empty(Map *m)
{
diff --git a/src/libsolv.ver b/src/libsolv.ver
index 5204e29..3902354 100644
--- a/src/libsolv.ver
+++ b/src/libsolv.ver
@@ -27,6 +27,7 @@ SOLV_1.0 {
dirpool_init;
dirpool_make_dirtraverse;
map_and;
+ map_and_not;
map_free;
map_grow;
map_init;