Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
SafeEnum< Target, LayoutType > Struct Template Reference
Helper class used to define safe enumerations. More...
#include <SafeEnum.h>
Public Types | |
typedef LayoutType | representation_t |
Type of the representation. | |
Public Member Functions | |
LayoutType | value () const |
Explicit access to the inner value of the SafeEnum instance. | |
const LayoutType * | storage () const |
Return a pointer to the inner storage. | |
Protected Member Functions | |
SafeEnum (LayoutType value) | |
Construction of an enumeration value. | |
Friends | |
bool | operator== (Target lhs, Target rhs) |
Equal to operator for Target instances. | |
bool | operator!= (Target lhs, Target rhs) |
Not equal to operator for Target instances. | |
bool | operator< (Target lhs, Target rhs) |
Less than operator for Target instances. | |
bool | operator<= (Target lhs, Target rhs) |
Less than or equal to operator for Target instances. | |
bool | operator> (Target lhs, Target rhs) |
Greater than operator for Target instances. | |
bool | operator>= (Target lhs, Target rhs) |
Greater than or equal to operator for Target instances. |
Detailed Description
template<typename Target, typename LayoutType = unsigned int>
struct ble::SafeEnum< Target, LayoutType >
Helper class used to define safe enumerations.
C++ 98 enums expose different security holes:
- Scope The scope of the enum is the scope defining it. In other words, enumerator defined at namespace scope are in the same scope that other enumerator defined in that namespace even if they belong to a different enumeration. As a result it is really easy to collide names between two different enumerators. At the end, the programmer has to protect its declaration with long prefixing.
- Unsafe comparison: enumerators really just are named integer and can be implicitly converted to integer. As a result it is possible to compare value of different enum type.
- Layout: The layout type of enumerations is implementation defined.
This template class expose a framework to overcome those issues:
First enum has to be defined in a structure which inherit from this class. The target type is the name of the structure containing the enumeration while LayoutType is the inner type used to stored the enum.
Comparison operator are provided so it is not possible to compare a SafeEnum of a type to another SafeEnum of a different type.
Implicit conversion to integer is not defined, users have to either use the value function which return the integer value stored in an EnumType. Client class can also define their own conversion operation.
- Template Parameters:
-
Target structure containing the enumeration definition. LayoutType Inner type used to store enumeration value.
struct color_t : SafeEnum<color_t> { enum type { RED, GREEN, BLACK }; color_t(type) : SafeEnum<color_t>(type) { } }; // use an uint8_t to store the enumeration value struct shape_t : SafeEnum<shape_t, uint8_t> { enum type { RECTANGLE, CIRCLE, TRIANGLE }; shape_t(type) : SafeEnum<shape_t>(type) { } }; // shape enumerator is in the shape_t scope. shape_t shape = shape_t::RECTANGLE; shape_t shape = color_t::RED; // Compilation error if (shape == shape_t::CIRCLE) { } // compilation error if (shape == color_t::RED) { } void sink(shape_t); (1) void sink(color_t); (2) sink(shape); // use overload (1) sink(color); // use overload (2) // explicit access to the value is mandatory when a SafeEnum value is used // as the condition in a switch statement switch(shape.value()) { case shape_t::RECTANGLE: break; }
Definition at line 109 of file SafeEnum.h.
Member Typedef Documentation
typedef LayoutType representation_t |
Type of the representation.
Definition at line 113 of file SafeEnum.h.
Constructor & Destructor Documentation
SafeEnum | ( | LayoutType | value ) | [explicit, protected] |
Construction of an enumeration value.
Definition at line 119 of file SafeEnum.h.
Member Function Documentation
const LayoutType* storage | ( | ) | const |
Return a pointer to the inner storage.
Definition at line 209 of file SafeEnum.h.
LayoutType value | ( | ) | const |
Explicit access to the inner value of the SafeEnum instance.
Definition at line 202 of file SafeEnum.h.
Friends And Related Function Documentation
bool operator!= | ( | Target | lhs, |
Target | rhs | ||
) | [friend] |
Not equal to operator for Target instances.
- Parameters:
-
lhs left hand side of the comparison rhs right hand side of the comparison
- Returns:
- true if the inner value of lhs and rhs are not equal and false otherwise.
Definition at line 144 of file SafeEnum.h.
bool operator< | ( | Target | lhs, |
Target | rhs | ||
) | [friend] |
Less than operator for Target instances.
- Parameters:
-
lhs left hand side of the comparison rhs right hand side of the comparison
- Returns:
- true if the inner value of lhs is less than rhs and false otherwise.
Definition at line 156 of file SafeEnum.h.
bool operator<= | ( | Target | lhs, |
Target | rhs | ||
) | [friend] |
Less than or equal to operator for Target instances.
- Parameters:
-
lhs left hand side of the comparison rhs right hand side of the comparison
- Returns:
- true if the inner value of lhs is less than or equal to rhs and false otherwise.
Definition at line 169 of file SafeEnum.h.
bool operator== | ( | Target | lhs, |
Target | rhs | ||
) | [friend] |
Equal to operator for Target instances.
- Parameters:
-
lhs left hand side of the comparison rhs right hand side of the comparison
- Returns:
- true if the inner value of lhs and rhs are equal and false otherwise.
Definition at line 131 of file SafeEnum.h.
bool operator> | ( | Target | lhs, |
Target | rhs | ||
) | [friend] |
Greater than operator for Target instances.
- Parameters:
-
lhs left hand side of the comparison rhs right hand side of the comparison
- Returns:
- true if the inner value of lhs is greater than rhs; false otherwise.
Definition at line 182 of file SafeEnum.h.
bool operator>= | ( | Target | lhs, |
Target | rhs | ||
) | [friend] |
Greater than or equal to operator for Target instances.
- Parameters:
-
lhs left hand side of the comparison rhs right hand side of the comparison
- Returns:
- true if the inner value of lhs is greater than or equal to rhs; false otherwise.
Definition at line 195 of file SafeEnum.h.
Generated on Tue Jul 12 2022 13:55:40 by
