A bitset is a set of smaller integers represented as one big one. Let’s remind ourselves how the integer is represented in binary:
The picture illustrates how the final value is calculated from the powers of two. We can manipulate each bit by itself by adding and subtracting the particular power of two. Therefore the exponents can be respresented as a single bit inside the integer consisting of 32 bits, 31 of which are usable since one is used for the sign (- or +). This means that we can save a set of values 1 to 31 using just a single integer.
Instead of saving and retrieving actual values, bitsets are usually used to save a bunch of booleans. In Wacraft III they can be found inside binary data e.g. for channel options. Those channel options are respectively represented as a bitset in the standard library, combined with an enum:
public enum Option
VISIBLE
TARGETIMAGE
PHYSICALSPELL
UNIVERSALSPELL
UNIQUECAST
public class ChannelAbilityPreset extends AbilityDefinitionIllidanChannel
private bitset optionSet = bitset(0)
function presetOption(Option opt, boolean flag)
let pow = opt castTo int
if optionSet.contains(pow)
if not flag
optionSet = optionSet.remove(pow)
else if flag
optionSet = optionSet.add(pow)
presetOptions(lvl -> optionSet.val)
function hasOption(Option option) returns boolean
return optionSet.contains(option castTo int)