ALib C++ Library
Library Version: 2312 R0
Documentation generated by doxygen
Nested namespaces | Classes | Functions
aworx::lib::enums Namespace Reference

This is the reference documentation of sub-namespace enums of the ALib C++ Library, which holds types of library module ALib Enums.

Extensive documentation for this module is provided with ALib Module Enums - Programmer's Manual.

Attention
All operators are declared in the global namespace, other than this namespace documentation indicates!

Nested namespaces

 arithmetical
 
 bitwise
 
 detail
 
 iterable
 

Classes

struct  EnumIterator
 
struct  EnumRecordParser
 
struct  EnumRecordPrototype
 
struct  EnumRecords
 
struct  ERSerializable
 
struct  T_EnumIsArithmetical
 
struct  T_EnumIsBitwise
 
struct  T_EnumIsIterable
 
struct  T_EnumRecords
 

Functions

ALIB_API void Bootstrap ()
 
template<typename TEnum >
const T_EnumRecords< TEnum >::Type & GetRecord (TEnum element)
 
template<typename TEnum , typename TChar , Case TSensitivity = Case::Ignore, Whitespaces TTrimBeforeConsume = Whitespaces::Trim>
bool Parse (strings::TSubstring< TChar > &input, TEnum &result)
 
template<typename TEnum , typename TChar , Case TSensitivity = Case::Ignore, Whitespaces TTrimBeforeConsume = Whitespaces::Trim, TChar delimiter = ',', bool keepLastDelim = true>
bool ParseBitwise (strings::TSubstring< TChar > &input, TEnum &result)
 
template<typename TEnum , typename TChar , Case TSensitivity = Case::Ignore, Whitespaces TTrimBeforeConsume = Whitespaces::Trim>
bool ParseEnumOrTypeBool (strings::TSubstring< TChar > &input, TEnum &result, TEnum falseValue, TEnum trueValue)
 
template<typename TEnum >
const T_EnumRecords< TEnum >::Type * TryRecord (TEnum element)
 
template<typename TEnum >
constexpr std::underlying_type< TEnum >::type UnderlyingIntegral (TEnum element) noexcept(true)
 

Function Documentation

◆ Bootstrap()

ALIB_API void aworx::lib::enums::Bootstrap ( )

This method initializes enum records, of built-in types i.e. those of the enumerations found in header file alib/lib/fs_commonenums/commonenums.hpp.

This method needs to be called with bootstrapping a software. The standard bootstrap code of ALib will perform this. Only if fileset Modules is not included in the ALib Distribution, this function has to be invoked "manually".

Note
In fact, if fileset Modules is included, then this function is empty, because the enumeration records will in this case be resourced in singleton aworx::ALIB of type ALibDistribution.

Multiple invocations of this method are ignored.

See also
For information about using this method, consult chapter 3.6 Bootstrapping Small Modules of the ALib Programmer's Manual.

This method needs to be called with bootstrapping a software. It mainly registers default and type-specific implementations of the built-in box-functions. In addition, in debug-compilations, static vtables are registered.

The standard bootstrap code of ALib will perform this. Only if fileset Modules is not included in the ALib Distribution, this function has to be invoked "manually".

Multiple invocations of this method are ignored.

See also
For information about using this method, consult chapter 3.6 Bootstrapping Small Modules of the ALib Programmer's Manual.

Initializes ALib thread logic. Multiple invocations of this method are ignored.

The standard bootstrap code of ALib will invoke this function. Only if fileset Modules is not included in the ALib Distribution, this function has to be invoked "manually".

See also
For information about using this method, consult chapter 3.6 Bootstrapping Small Modules of the ALib Programmer's Manual.

Initializes ALib time logic. Multiple invocations of this method are ignored.

The standard bootstrap code of ALib will perform this. Only if fileset fileset Modules is not included in the ALib Distribution, this function has to be invoked "manually".

See also
For information about using this method, consult chapter 3.6 Bootstrapping Small Modules of the ALib Programmer's Manual.

Definition at line 732 of file boxing.cpp.

Here is the call graph for this function:

◆ GetRecord()

const T_EnumRecords<TEnum>::Type& aworx::lib::enums::GetRecord ( TEnum  element)
inline

Returns the enum record for element element of enumeration type TEnum . In debug-compilations an ALib assertion is raised, if no enum record was defined for element.

Internally, references to enum records are stored in a hash map. With that, this method executes in constant time O(1) in the average case.

See also
  • Function TryRecord which returns a pointer to the record and nullptr if no record was defined for element.
  • Class Enum of module ALib Boxing and its method Enum::GetRecord, which allows to collect the necessary run-time information to defer the retrieval of enum records.
Template Parameters
TEnumThe enumeration type. Deduced from given argument.
Parameters
elementThe enum element to search for.
Returns
The record that is associated with element.

◆ Parse()

bool aworx::lib::enums::Parse ( strings::TSubstring< TChar > &  input,
TEnum &  result 
)
inline

Consumes an element value of a C++ enumeration that is equipped with ALib Enum Records of type ERSerializable (or of a derived type) from a given Substring.

In debug builds, the method asserts that at least one record is defined for TEnum.

For more information consult chapter 4.3.1 Serialization/Deserialization of the Programmer's Manual of module ALib Enums.

Note
This namespace function is applicable to bitwise enums as well. However, only one element name is parsed. To parse multiple elements (ored to one resulting enum value), use sibling function ParseBitwise.
Template Parameters
TEnumThe enumeration type equipped with ALib Enum Recorss of type ERSerializable.
TCharThe character type of the input substring. Deduced by the compiler.
TSensitivityThe sensitivity of the comparison. Defaults to Case::Sensitive.
TTrimBeforeConsumeDetermines if the sub string should be (left-) trimmed before the consume operation. If so, in case of parsing failure, trimming is not restored.
Defaults to Whitespaces::Trim.
Parameters
[in,out]inputThe substring to parse. Passed as reference. On success, the substring will be shortened by the characters consumed. On failure only trimmed characters are consumed.
[out]resultThe result enum element given as reference.
Returns
true if an enum element was successfuly recognized, false otherwise.

Module Dependencies

This method is only available if ALib Strings is included in the ALib Distribution.

◆ ParseBitwise()

bool aworx::lib::enums::ParseBitwise ( strings::TSubstring< TChar > &  input,
TEnum &  result 
)
inline

Repeatedly invokes sibling function Parse until delim is not found. The enum element values are or'ed in result.

In debug builds, the method asserts that at least one record is defined for TEnum.

Note
This method is applicable only to bitwise enums that likewise are equipped with ALib Enum Records of (derived) type ERSerializable.
Template Parameters
TEnumThe enumeration type equipped with ALib Enum Records of (derived) type ERSerializable and furthermore with a specialization of T_EnumIsBitwise.
TCharThe character type of the input substring. Deduced by the compiler.
TSensitivityThe sensitivity of the comparison. Defaults to Case::Ignore.
TTrimBeforeConsumeDetermines if the substring should be (left-) trimmed before and after each consume operation. If so, in case of parsing failure, trimming is not restored.
Defaults to Whitespaces::Trim.
delimiterThe delimiter character of the enum elements.
Defaults to ','.
keepLastDelimIf true , the delimiter will be kept in this sub-string, if after the delimiter no further enum element was found. If false, the delimiter will be kept.
Defaults to true.
Parameters
[in,out]inputThe substring to parse. Passed as reference. On success, the substring will be shortened by the characters consumed. On failure only trimmed characters are consumed.
[out]resultThe result enum element given as reference.
Returns
true if an enum element was successfuly recognized, false otherwise.

Module Dependencies

This method is only available if ALib Strings is included in the ALib Distribution.

◆ ParseEnumOrTypeBool()

bool aworx::lib::enums::ParseEnumOrTypeBool ( strings::TSubstring< TChar > &  input,
TEnum &  result,
TEnum  falseValue,
TEnum  trueValue 
)
inline

Convenience method that first uses Parse to try and read an element of a C++ enum. If this is not successful, an enum of type Bool is tried to be read. If this is successful, depending on the value read, the TEnum values given as parameters falseValue and trueValue are assigned. Otherwise false is returned.

In debug builds, the method asserts that at least one record is defined for TEnum.

Availability

This function is available only if fileset "Common Enums" is included in the ALib Distribution.

See also
For more information consult chapter 4.3.1 Serialization/Deserialization of the Programmer's Manual of module ALib Resources.
Template Parameters
TEnumThe enumeration type equipped with ALib Enum Records of (derived) type ERSerializable.
TCharThe character type of the input substring. Deduced by the compiler.
TSensitivityThe sensitivity of the comparison. Defaults to Case::Ignore.
TTrimBeforeConsumeDetermines if the substring should be (left-) trimmed before and after each consume operation. If so, in case of parsing failure, trimming is not restored.
Defaults to Whitespaces::Trim.
Parameters
trueValueThe TEnum value to use in case of Bool::True was read.
falseValueThe TEnum value to use in case of Bool::False was read.
[in,out]inputThe substring to parse. Passed as reference. On success, the substring will be shortened by the characters consumed. On failure only trimmed characters are consumed.
[out]resultThe result enum element given as reference.
Returns
true if an element of TEnum or Bool could be read, false otherwise.

◆ TryRecord()

const T_EnumRecords<TEnum>::Type* aworx::lib::enums::TryRecord ( TEnum  element)
inline

If defined, returns a pointer to the enum record for element element of enumeration type TEnum . If no enum record was defined, nullptr is returned.

See also
  • Function GetRecord which returns a reference and asserts in debug-compilations if no record is defined for element during bootstrap.
  • Class Enum of module ALib Boxing and its method Enum::TryRecord, which allows to collect the necessary run-time information to defer the retrieval of enum records.
Template Parameters
TEnumThe enumeration type. Deduced from given argument.
Parameters
elementThe enum element to search for.
Returns
A pointer to the record that is associated with element, respectively nullptr if no record was defined.

◆ UnderlyingIntegral()

constexpr std::underlying_type<TEnum>::type aworx::lib::enums::UnderlyingIntegral ( TEnum  element)
constexprnoexcept

Simple alias to nested statment static_cast and type traits std::underlying_type, which is

  • selected by the compiler only if template parameter TEnum represents an enum type, and
  • is probably better readable.
Note
While documented in namespace aworx::lib::enums in fact this function resides in namespace aworx.
See also
Class Enum introduced with module ALib Boxing.
Template Parameters
TEnumEnumeration type. Deduced by the compiler.
Parameters
elementThe enumeration element.
Returns
true if all bits of testFor are set in tested.