[Spice-commits] common/utils.h

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Mar 4 16:44:04 UTC 2020


 common/utils.h |   24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

New commits:
commit ec4e44200a2b3c742df197989639d2b9fd3f0348
Author: Kevin Pouget <kpouget at redhat.com>
Date:   Mon Nov 25 09:52:25 2019 +0100

    utils: add set_bitmap/test_bitmap functions
    
    This patch introduces `set_bitmap` and `test_bitmap` + relevant
    macros, adapted from `<qemu>/include/qemu/bitops.h`.
    
    These functions differ from `set_bit`/`test_bit` as they can set/test
    bits in bit arrays longer than scalar data-types.
    
    Signed-off-by: Kevin Pouget <kpouget at redhat.com>
    Acked-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/common/utils.h b/common/utils.h
index e853209..13c9d80 100644
--- a/common/utils.h
+++ b/common/utils.h
@@ -21,6 +21,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
+#include <stdint.h>
 
 G_BEGIN_DECLS
 
@@ -28,6 +29,29 @@ const char *spice_genum_get_nick(GType enum_type, gint value);
 int spice_genum_get_value(GType enum_type, const char *nick,
                           gint default_value);
 
+#define BIT_BYTE(nr)            ((nr) / 8)
+#define BIT_MASK(nr)            (1 << ((nr) % 8))
+
+/**
+ * set_bitmap - Set a bit in memory
+ * @nr: the bit to set
+ * @addr: the address to start counting from
+ */
+static inline void set_bitmap(uint32_t nr, uint8_t *addr)
+{
+    addr[BIT_BYTE(nr)] |= BIT_MASK(nr);
+}
+
+/**
+ * test_bitmap - Determine whether a bit is set
+ * @nr: bit number to test
+ * @addr: Address to start counting from
+ */
+static inline int test_bitmap(uint32_t nr, const uint8_t *addr)
+{
+    return 1 & (addr[BIT_BYTE(nr)] >> (nr % 8));
+}
+
 G_END_DECLS
 
 #endif //H_SPICE_COMMON_UTILS


More information about the Spice-commits mailing list