Gromacs  2020.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Functions
enumerationhelpers.h File Reference
#include <cstddef>
#include <iterator>
#include <type_traits>
#include "gromacs/utility/gmxassert.h"
+ Include dependency graph for enumerationhelpers.h:
+ This graph shows which files directly or indirectly include this file:


Defines helper types for class enumerations.

These helper types facilitate iterating over class enums, and maintaining a type-safe and value-safe matching list of names. The code is closely based on the public-domain code by Guilherme R. Lampert, found in commit c94c18a of Thanks Guilherme!

NOTE This functionality only works for enumerations of monotonically increasing values, starting with the value zero.

Usage examples:

enum class Foo { Bar, Baz, Fooz, Count };

EnumerationWrapper<Foo> iter;

for (Foo c : iter) { // 'c' is a constant from Foo }

const EnumerationArray<Foo, std::string> fooStrings = { { "Bar", "Baz", "Fooz" } };

for (Foo c : keysOf(fooStrings)) { print(fooStrings[c]); }

ArrayRef<const std::string> namesRef(fooStrings);

Mark Abraham


class  gmx::EnumerationIterator< EnumType, Last, Step >
 Allows iterating sequential enumerators. More...
class  gmx::EnumerationWrapper< EnumType, Last, Step >
 Allows constructing iterators for looping over sequential enumerators. More...
struct  gmx::EnumerationArray< EnumType, DataType, ArraySize >
 Wrapper for a C-style array with size and indexing defined by an enum. Useful for declaring arrays of enum names for debug or other printing. An ArrayRef<DataType> may be constructed from an object of this type. More...


template<typename EnumerationArrayType >
EnumerationArrayType::EnumerationWrapperType gmx::keysOf (const EnumerationArrayType &)
 Returns an object that provides iterators over the keys associated with EnumerationArrayType. More...