Class bitflags
+Bitflags module.
+The bitflag object makes it easy to manipulate flags in a bitmask.
+ + It has metamethods that do the hard work, adding flags sets them, substracting
+ unsets them. Comparing flags checks if all flags in the second set are also set
+ in the first set. The has
method checks if all flags in the second set are
+ also set in the first set, but behaves slightly different.
Indexing allows checking values or setting them by bit index (eg. 0-7 for flags + in the first byte).
+ + NOTE: unavailable flags (eg. Windows flags on a Posix system) should not be
+ omitted, but be assigned a value of 0. This is because the has
method will
+ return false
if the flags are checked and the value is 0.
See system.bitflag (the constructor) for extensive examples on usage.
+ + +Bit flags
+bitflag:has_all_of (subset) | +Checks if all the flags in the given subset are set. | +
bitflag:has_any_of (subset) | +Checks if any of the flags in the given subset are set. | +
bitflag:value () | +Retrieves the numeric value of the bitflag object. | +
system.bitflag ([value=0]) | +Creates a new bitflag object from the given value. | +
+
+ + +
Bit flags
+ +-
+
- + + bitflag:has_all_of (subset) + +
-
+ Checks if all the flags in the given subset are set.
+If the flags to check has a value
0
, it will always returnfalse
. So if there are flags that are +unsupported on a platform, they can be set to 0 and the has_all_of function will +returnfalse
if the flags are checked. + + +Parameters:
+-
+
- subset + bitflag + the flags to check for. + +
Returns:
+-
+
+ boolean
+ true if all the flags are set, false otherwise.
+
Usage:
+-
+
local sys = require 'system' +local flags = sys.bitflag(12) -- b1100 +local myflags = sys.bitflag(15) -- b1111 +print(flags:has_all_of(myflags)) -- false, not all bits in myflags are set in flags +print(myflags:has_all_of(flags)) -- true, all bits in flags are set in myflags
+ + +
+ - + + bitflag:has_any_of (subset) + +
-
+ Checks if any of the flags in the given subset are set.
+If the flags to check has a value
0
, it will always returnfalse
. So if there are flags that are +unsupported on a platform, they can be set to 0 and the has_any_of function will +returnfalse
if the flags are checked. + + +Parameters:
+-
+
- subset + bitflag + the flags to check for. + +
Returns:
+-
+
+ boolean
+ true if any of the flags are set, false otherwise.
+
Usage:
+-
+
local sys = require 'system' +local flags = sys.bitflag(12) -- b1100 +local myflags = sys.bitflag(7) -- b0111 +print(flags:has_any_of(myflags)) -- true, some bits in myflags are set in flags +print(myflags:has_any_of(flags)) -- true, some bits in flags are set in myflags
+ + +
+ - + + bitflag:value () + +
-
+ Retrieves the numeric value of the bitflag object.
+
+
+
+
Returns:
+-
+
+ number
+ the numeric value of the bitflags.
+
Usage:
+-
+
local sys = require 'system' +local flags = sys.bitflag() -- b0000 +flags[0] = true -- b0001 +flags[2] = true -- b0101 +print(flags:value()) -- 5
+ + +
+ - + + system.bitflag ([value=0]) + +
-
+ Creates a new bitflag object from the given value.
+
+
+
Parameters:
+-
+
- value + number + the value to create the bitflag object from. + (default 0) + +
Returns:
+-
+
+ bitflag
+ bitflag object with the given values set.
+
Usage:
+-
+
local sys = require 'system' +local flags = sys.bitflag(2) -- b0010 + +-- get state of individual bits +print(flags[0]) -- false +print(flags[1]) -- true + +-- set individual bits +flags[0] = true -- b0011 +print(flags:value()) -- 3 +print(flags) -- "bitflags: 3" + +-- adding flags (bitwise OR) +local flags1 = sys.bitflag(1) -- b0001 +local flags2 = sys.bitflag(2) -- b0010 +local flags3 = flags1 + flags2 -- b0011 + +-- substracting flags (bitwise AND NOT) +print(flags3:value()) -- 3 +flag3 = flag3 - flag3 -- b0000 +print(flags3:value()) -- 0 + +-- comparing flags +local flags4 = sys.bitflag(7) -- b0111 +local flags5 = sys.bitflag(255) -- b11111111 +print(flags5 ~= flags4) -- true, not the same flags +local flags6 = sys.bitflag(7) -- b0111 +print(flags6 == flags4) -- true, same flags + +-- comparison of subsets +local flags7 = sys.bitflag(0) -- b0000 +local flags8 = sys.bitflag(3) -- b0011 +local flags9 = sys.bitflag(7) -- b0111 +print(flags9:has_all_of(flags8)) -- true, flags8 bits are all set in flags9 +print(flags8:has_any_of(flags9)) -- true, some of flags9 bits are set in flags8 +print(flags8:has_all_of(flags7)) -- false, flags7 (== 0) is not set in flags8
+ + +
+