From efcd5218a40e3b1fe0681e9f3d77f548cda774af Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sun, 24 Apr 2016 19:15:50 -0400 Subject: [PATCH] Bit manipulation routines --- src/kstd/Bitmap.hh | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/kstd/Bitmap.hh b/src/kstd/Bitmap.hh index e0d3ad1..6414e04 100644 --- a/src/kstd/Bitmap.hh +++ b/src/kstd/Bitmap.hh @@ -13,6 +13,60 @@ namespace kstd { +namespace Bit { + +template +inline bool +get(T field, + u8 bit) +{ + return (field & (1 << bit)) > 0; +} + +template +inline void +set(T& field, + u8 bit) +{ + field |= T(1 << bit); +} + +template +inline void +clear(T& field, + u8 bit) +{ + field &= ~T(1 << bit); +} + +template +inline T +getMask(T field, + T mask) +{ + return field & mask; +} + +template +inline void +setMask(T& field, + T value, + T mask) +{ + // Keep everything the same (~mask), but OR in the new value + field = (field & ~mask) | value; +} + +template +inline void +clearMask(T& field, + T mask) +{ + field &= ~mask; +} + +} /* namespace Bit */ + /** An array-like object of N bits, where N is the size of the type T given as a template parameter. */ template struct Bitmap