Skip to content

Commit

Permalink
Documentation.
Browse files Browse the repository at this point in the history
  • Loading branch information
Dalzhim committed Aug 11, 2017
1 parent 849fe46 commit b526079
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Bitmask operators and typesafe comparisons for enum class
*EnumClass.h* is a utility header that allows you to easily generate bitwise operators for your custom `enum class` type like so:
```cpp
enum class myEnum
{
enumerator1 = 0x1 << 0,
enumerator2 = 0x1 << 1,
enumerator3 = 0x1 << 2
};

enableEnumClassBitmask(myEnum); // Activate bitmask operators
```
This utility relies on two concepts: enumerators and masks. An enumerator’s purpose is to give a name to a specific bit when it is set. A mask, on the other hand, represents the state of every bit (and this way, of every enumerator), whether they are set or cleared. Comparing an enumerator to a mask using `operator==` or `operator!=` is a compiler error.
Here are some tables that summarize the return type of all of the operators :
#### Binary bitwise operators
||**`E, E`**|**`E`, `bitmask<E>`**|**`bitmask<E>`, `E`**|**`bitmask<E>`, `bitmask<E>`**|
|**`operator&`**|`E`|`E`|`E`|`bitmask<E>`|
|**`operator|`**|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|
|**`operator^`**|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|
|**`operator&=`**|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|
|**`operator|=`**|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|
|**`operator^=`**|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|`bitmask<E>`|
#### Unary bitwise operators
||**`E`**|**`bitmask<E>`**|
|**`operator~`**|`bitmask<E>`|`bitmask<E>`|
#### Comparison operators
||**`E, E`**|**`E`, `bitmask<E>`**|**`bitmask<E>`, `E`**|**`bitmask<E>`, `bitmask<E>`**|
|**`operator==`**|`bool`|`static_assert`|`static_assert`|`bool`|
|**`operator!=`**|`bool`|`static_assert`|`static_assert`|`bool`|

0 comments on commit b526079

Please sign in to comment.