OpenTTD Source: src/core/enum_type.hpp File Reference

OpenTTD Source 15.0-RC2

Data Structures | Macros | Functions | Variables
enum_type.hpp File Reference

Type (helpers) for enums. More...

`#include "base_bitset_type.hpp"`

Go to the source code of this file.

## Data Structures
struct | is_enum_incrementable< enum_type >
| Trait to enable prefix/postfix incrementing operators. More...
struct | is_enum_sequential< enum_type >
| Trait to enable prefix/postfix incrementing operators. More...
struct | EnumBitSetMask< Tstorage, Tenum, Tend_value >
| Helper template structure to get the mask for an EnumBitSet from the end enum value. More...
class | EnumBitSet< Tenum, Tstorage, Tend_value >
| Enum-as-bit-set wrapper. More...

## Macros
#define | DECLARE_INCREMENT_DECREMENT_OPERATORS(enum_type)
| For some enums it is useful to have pre/post increment/decrement operators.
#define | DECLARE_ENUM_AS_SEQUENTIAL(enum_type)
| For some enums it is useful to add/sub more than 1.
#define | DECLARE_ENUM_AS_BIT_SET(enum_type)
| Operators to allow to work with enum as with type safe bit set in C++.
#define | DECLARE_ENUM_AS_ADDABLE(EnumType)
| Operator that allows this enumeration to be added to any other enumeration.

## Functions
template<typename enum_type >
constexpr std::underlying_type_t< enum_type > | to_underlying (enum_type e)
| Implementation of std::to_underlying (from C++23)
template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>
constexpr enum_type & | operator++ (enum_type &e)
| Prefix increment.
template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>
constexpr enum_type | operator++ (enum_type &e, int)
| Postfix increment, uses prefix increment.
template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>
constexpr enum_type & | operator-- (enum_type &e)
| Prefix decrement.
template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>
constexpr enum_type | operator-- (enum_type &e, int)
| Postfix decrement, uses prefix decrement.
template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>
constexpr enum_type | operator+ (enum_type e, int offset)
| Add integer.
template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>
constexpr enum_type & | operator+= (enum_type &e, int offset)
template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>
constexpr enum_type | operator- (enum_type e, int offset)
| Sub integer.
template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>
constexpr enum_type & | operator-= (enum_type &e, int offset)
template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>
constexpr auto | operator- (enum_type a, enum_type b)
| Distance.
template<typename T , class = typename std::enable_if_t<std::is_enum_v<T>>>
constexpr bool | HasFlag (const T x, const T y)
| Checks if a value in a bitset enum is set.
template<typename T , class = typename std::enable_if_t<std::is_enum_v<T>>>
constexpr void | ToggleFlag (T &x, const T y)
| Toggle a value in a bitset enum.

## Variables
template<typename enum_type >
constexpr bool | is_enum_incrementable_v = is_enum_incrementable<enum_type>::value
template<typename enum_type >
constexpr bool | is_enum_sequential_v = is_enum_sequential<enum_type>::value

## Detailed Description

Type (helpers) for enums.

Definition in file enum_type.hpp.

## Macro Definition Documentation

## ◆ DECLARE_ENUM_AS_ADDABLE

#define DECLARE_ENUM_AS_ADDABLE | ( |  | EnumType | ) |

Value:
template <typename OtherEnumType, typename = typename std::enable_if<std::is_enum_v<OtherEnumType>, OtherEnumType>::type> \
constexpr OtherEnumType operator + (OtherEnumType m1, EnumType m2) { \
return static_cast<OtherEnumType>(to_underlying(m1) + to_underlying(m2)); \
}
to_underlying
constexpr std::underlying_type_t< enum_type > to_underlying(enum_type e)
Implementation of std::to_underlying (from C++23)
Definition enum_type.hpp:17
operator+
constexpr enum_type operator+(enum_type e, int offset)
Add integer.
Definition enum_type.hpp:79

Operator that allows this enumeration to be added to any other enumeration.

Definition at line 129 of file enum_type.hpp.

## ◆ DECLARE_ENUM_AS_BIT_SET

#define DECLARE_ENUM_AS_BIT_SET | ( |  | enum_type | ) |

Value:
inline constexpr enum_type operator | (enum_type m1, enum_type m2) { return static_cast<enum_type>(to_underlying(m1) | to_underlying(m2)); } \
inline constexpr enum_type operator & (enum_type m1, enum_type m2) { return static_cast<enum_type>(to_underlying(m1) & to_underlying(m2)); } \
inline constexpr enum_type operator ^ (enum_type m1, enum_type m2) { return static_cast<enum_type>(to_underlying(m1) ^ to_underlying(m2)); } \
inline constexpr enum_type& operator |= (enum_type& m1, enum_type m2) { m1 = m1 | m2; return m1; } \
inline constexpr enum_type& operator &= (enum_type& m1, enum_type m2) { m1 = m1 & m2; return m1; } \
inline constexpr enum_type& operator ^= (enum_type& m1, enum_type m2) { m1 = m1 ^ m2; return m1; } \
inline constexpr enum_type operator ~(enum_type m) { return static_cast<enum_type>(~to_underlying(m)); }

Operators to allow to work with enum as with type safe bit set in C++.

Definition at line 119 of file enum_type.hpp.

## ◆ DECLARE_ENUM_AS_SEQUENTIAL

#define DECLARE_ENUM_AS_SEQUENTIAL | ( |  | enum_type | ) |

Value:
template <> struct is_enum_sequential<enum_type> { \
static const bool value = true; \
};
is_enum_sequential
Trait to enable prefix/postfix incrementing operators.
Definition enum_type.hpp:70

For some enums it is useful to add/sub more than 1.

Definition at line 113 of file enum_type.hpp.

## ◆ DECLARE_INCREMENT_DECREMENT_OPERATORS

#define DECLARE_INCREMENT_DECREMENT_OPERATORS | ( |  | enum_type | ) |

Value:
template <> struct is_enum_incrementable<enum_type> { \
static const bool value = true; \
};
is_enum_incrementable
Trait to enable prefix/postfix incrementing operators.
Definition enum_type.hpp:21

For some enums it is useful to have pre/post increment/decrement operators.

Definition at line 63 of file enum_type.hpp.

## Function Documentation

## ◆ HasFlag()

template<typename T , class = typename std::enable_if_t<std::is_enum_v<T>>>

constexpr bool HasFlag | ( | const T | x,
|  | const T | y
| ) |  |
| inlineconstexpr

Checks if a value in a bitset enum is set.

Parameters

  x | The value to check.
  y | The flag to check.

Returns
  True iff the flag is set.

Definition at line 142 of file enum_type.hpp.

Referenced by DrawLayoutLine(), and ToggleFlag().

## ◆ operator+()

template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>

constexpr enum_type operator+ | ( | enum_type | e,
|  | int | offset
| ) |  |
| inlineconstexpr

Add integer.

Definition at line 79 of file enum_type.hpp.

References to_underlying().

## ◆ operator++() [1/2]

template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>

constexpr enum_type & operator++ | ( | enum_type & | e | ) |
| inlineconstexpr

Prefix increment.

Definition at line 30 of file enum_type.hpp.

References to_underlying().

## ◆ operator++() [2/2]

template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>

constexpr enum_type operator++ | ( | enum_type & | e,
|  | int |
| ) |  |
| inlineconstexpr

Postfix increment, uses prefix increment.

Definition at line 38 of file enum_type.hpp.

## ◆ operator+=()

template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>

constexpr enum_type & operator+= | ( | enum_type & | e,
|  | int | offset
| ) |  |
| inlineconstexpr

Definition at line 85 of file enum_type.hpp.

## ◆ operator-() [1/2]

template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>

constexpr auto operator- | ( | enum_type | a,
|  | enum_type | b
| ) |  |
| inlineconstexpr

Distance.

Definition at line 107 of file enum_type.hpp.

References to_underlying().

## ◆ operator-() [2/2]

template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>

constexpr enum_type operator- | ( | enum_type | e,
|  | int | offset
| ) |  |
| inlineconstexpr

Sub integer.

Definition at line 93 of file enum_type.hpp.

References to_underlying().

## ◆ operator--() [1/2]

template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>

constexpr enum_type & operator-- | ( | enum_type & | e | ) |
| inlineconstexpr

Prefix decrement.

Definition at line 47 of file enum_type.hpp.

References to_underlying().

## ◆ operator--() [2/2]

template<typename enum_type , std::enable_if_t< is_enum_incrementable_v< enum_type >, bool > = true>

constexpr enum_type operator-- | ( | enum_type & | e,
|  | int |
| ) |  |
| inlineconstexpr

Postfix decrement, uses prefix decrement.

Definition at line 55 of file enum_type.hpp.

## ◆ operator-=()

template<typename enum_type , std::enable_if_t< is_enum_sequential_v< enum_type >, bool > = true>

constexpr enum_type & operator-= | ( | enum_type & | e,
|  | int | offset
| ) |  |
| inlineconstexpr

Definition at line 99 of file enum_type.hpp.

## ◆ to_underlying()

template<typename enum_type >

constexpr std::underlying_type_t< enum_type > to_underlying | ( | enum_type | e | ) |
| constexpr

Implementation of std::to_underlying (from C++23)

Definition at line 17 of file enum_type.hpp.

Referenced by AfterLoadGame(), AmbientSoundEffectCallback(), BadgeClassSaveConfigFeature(), CheckforTownRating(), CmdBuildBridge(), CmdBuildDock(), CmdBuildRoad(), CmdBuildTunnel(), CmdDoTownAction(), CmdModifyOrder(), CmdPlantTree(), TownAuthorityWindow::DrawActions(), NetworkContentListWindow::DrawDetails(), DrawOrderString(), DrawRoadBits(), DrawWaterDepot(), DrawWaterLock(), TownAuthorityWindow::DrawWidget(), FixOwnerOfRailTrack(), GetBadgeClassConfiguration(), GetBridgeTooLowMessageForStationType(), GetGlobalVariable(), GetIndustryGamePlayProbability(), GetLockPartMinimalBridgeHeight(), GetMaxTreeSpriteSize(), GetNearbyTileInformation(), GetScaledIndustryGenerationProbability(), GetShipDepotDirection(), OpenGLBackend::GetSpriteAlignment(), GetStationBridgeableTileInfo(), GetStationTileLayout(), GetTownActionCost(), GetTownRadiusGroup(), AirportTileScopeResolver::GetVariable(), HouseScopeResolver::GetVariable(), IndustriesScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), RailTypeScopeResolver::GetVariable(), RoadStopScopeResolver::GetVariable(), RoadTypeScopeResolver::GetVariable(), TownScopeResolver::GetVariable(), IndustriesChangeInfo(), IsCommandAllowedWhilePaused(), LoadSpriteTables(), MakeLockTile(), MakeRailDepot(), MakeRoadCrossing(), MakeRoadDepot(), MakeRoadNormal(), MakeShipDepot(), MakeStation(), MakeTree(), MakeTreeTypeButtons(), ViewportSign::MarkDirty(), MarkViewportDirty(), MoveBuoysToWaypoints(), MoveToNextNewsItem(), MoveToNextTickerItem(), CreateScenarioWindow::OnClick(), SpriteAlignerWindow::OnClick(), OrdersWindow::OnClick(), CompanyStationsWindow::OnClick(), SpriteAlignerWindow::OnInvalidateData(), BuildRoadToolbarWindow::OnPlaceMouseUp(), OpenGLSprite::OpenGLSprite(), operator+(), operator++(), operator-(), operator-(), operator--(), OrdersWindow::OrderClick_FullLoad(), OrdersWindow::OrderClick_Service(), OrdersWindow::OrderClick_Unload(), OutputContentState(), ScaleByZoom(), ScaleByZoomLower(), CombinedAuthenticationServerHandler::SendRequest(), ServerNetworkAdminSocketHandler::SendWelcome(), SetAnimatedTileState(), Order::SetConditionComparator(), Order::SetConditionVariable(), SetHasSignals(), Order::SetLoadType(), SetRoadside(), SetRoadWaypointRoadside(), Order::SetStopLocation(), SetTreeGrowth(), Order::SetUnloadType(), SetupScreenshotViewport(), SetWaterClass(), SetWaterTileType(), ShowLastNewsMessage(), ShowNewspaper(), SndPlayScreenCoordFx(), NetworkContentListWindow::StateSorter(), TestVehicleBuildProbability(), UnScaleByZoom(), UnScaleByZoomLower(), UpdateTownRadius(), OrdersWindow::UpdateWidgetSize(), TownAuthorityWindow::UpdateWidgetSize(), ValueStr(), ValueStr(), ValueStr(), and ValueStr().

## ◆ ToggleFlag()

template<typename T , class = typename std::enable_if_t<std::is_enum_v<T>>>

constexpr void ToggleFlag | ( | T & | x,
|  | const T | y
| ) |  |
| inlineconstexpr

Toggle a value in a bitset enum.

Parameters

  x | The value to change.
  y | The flag to toggle.

Definition at line 153 of file enum_type.hpp.

References HasFlag().

## Variable Documentation

## ◆ is_enum_incrementable_v

template<typename enum_type >

constexpr bool is_enum_incrementable_v = is_enum_incrementable<enum_type>::value
| constexpr

Definition at line 26 of file enum_type.hpp.

## ◆ is_enum_sequential_v

template<typename enum_type >

constexpr bool is_enum_sequential_v = is_enum_sequential<enum_type>::value
| constexpr

Definition at line 75 of file enum_type.hpp.