[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