Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Enumeration.h File Reference
#include "Stroika/Foundation/StroikaPreComp.h"
#include <array>
#include <optional>
#include <type_traits>
#include <utility>
#include <vector>
#include "Stroika/Foundation/Common/Common.h"
#include "Enumeration.inl"

Go to the source code of this file.

Classes

struct  Stroika::Foundation::Common::DefaultNames< ENUM_TYPE >
 

Namespaces

namespace  Stroika::Foundation
 
namespace  Stroika::Foundation::Common
 

Concepts

concept  Stroika::Foundation::Common::IBoundedEnum
 

Macros

#define Stroika_Define_Enum_Bounds(FIRST_ITEM, LAST_ITEM)    eSTART = FIRST_ITEM, eEND = LAST_ITEM + 1, eLAST = LAST_ITEM, eCOUNT = eEND - eSTART,
 

Functions

template<typename ENUM >
constexpr ENUM Stroika::Foundation::Common::Inc (ENUM e)
 Increment the given enumeration safely, without a bunch of casts.
 
template<typename ENUM >
constexpr underlying_type_t< ENUM > Stroika::Foundation::Common::ToInt (ENUM e)
 Cast the given enum to an int (like static_cast<int>()) - but check range.
 
template<typename ENUM >
constexpr make_unsigned_t< underlying_type_t< ENUM > > Stroika::Foundation::Common::GetDistanceSpanned (ENUM e)
 return the distance spanned by an enum, e.g. for use in an array
 
template<typename ENUM >
constexpr ENUM Stroika::Foundation::Common::ToEnum (underlying_type_t< ENUM > e)
 Cast the given int to the given ENUM type - (like static_cast<int>()) - but check range.
 
template<typename ENUM >
constexpr make_unsigned_t< underlying_type_t< ENUM > > Stroika::Foundation::Common::OffsetFromStart (ENUM e)
 offset of given enum from ENUM::eSTART
 

Detailed Description

Note
Code-Status: Beta

TODO:

 @todo   http://stroika-bugs.sophists.com/browse/STK-549 - RequireItemsOrderedByEnumValue and
         static_cast usage confusion.

 @todo   I tried using EnumNames<> as an alias for initializer_list, but then I couldn't add the
         GetNames () method. I tried subclassing, but then I ran into lifetime issues. I tried aggregation,
         but this has the same lifetime issues with subclassing std::initializer_list. In the end I had
         to copy. That maybe a poor tradeoff. The only reason for not using aliases was to add
         the Peek/GetName methods, but those could have been global functions? Hmmm.

Definition in file Enumeration.h.

Macro Definition Documentation

◆ Stroika_Define_Enum_Bounds

#define Stroika_Define_Enum_Bounds (   FIRST_ITEM,
  LAST_ITEM 
)     eSTART = FIRST_ITEM, eEND = LAST_ITEM + 1, eLAST = LAST_ITEM, eCOUNT = eEND - eSTART,
Define meta information on enums using standardized names, so you can generically
write things like:
    for (auto i = X::eSTART; i != X::eEND; i = Inc (i));

Definition at line 109 of file Enumeration.h.