lib: abstract bit validity check in bit test/set/clear macros
authorJani Nikula <jani@nikula.org>
Mon, 23 Feb 2015 16:56:14 +0000 (18:56 +0200)
committerDavid Bremner <david@tethera.net>
Wed, 25 Feb 2015 22:08:35 +0000 (23:08 +0100)
Reduce duplication in the bit test/set/clear macros. No functional
changes.

lib/notmuch-private.h

index 012ad25c42cd3845588f9e2cee0b9d4a631900f7..02a8fc62b6319eaa34d300cb4214d92731a5ec9e 100644 (file)
@@ -64,15 +64,14 @@ NOTMUCH_BEGIN_DECLS
     strncmp ((var), (literal), sizeof (literal) - 1)
 
 /* Robust bit test/set/reset macros */
+#define _NOTMUCH_VALID_BIT(bit) \
+    ((bit) >= 0 && (bit) < CHAR_BIT * sizeof (unsigned long long))
 #define NOTMUCH_TEST_BIT(val, bit) \
-    (((bit) < 0 || (bit) >= CHAR_BIT * sizeof (unsigned long long)) ? 0        \
-     : !!((val) & (1ull << (bit))))
+    (_NOTMUCH_VALID_BIT(bit) ? !!((val) & (1ull << (bit))) : 0)
 #define NOTMUCH_SET_BIT(valp, bit) \
-    (((bit) < 0 || (bit) >= CHAR_BIT * sizeof (unsigned long long)) ? *(valp) \
-     : (*(valp) |= (1ull << (bit))))
+    (_NOTMUCH_VALID_BIT(bit) ? (*(valp) |= (1ull << (bit))) : *(valp))
 #define NOTMUCH_CLEAR_BIT(valp,  bit) \
-    (((bit) < 0 || (bit) >= CHAR_BIT * sizeof (unsigned long long)) ? *(valp) \
-     : (*(valp) &= ~(1ull << (bit))))
+    (_NOTMUCH_VALID_BIT(bit) ? (*(valp) &= ~(1ull << (bit))) : *(valp))
 
 #define unused(x) x __attribute__ ((unused))