neoGFX
Cross-platform C++ app/game engine
Loading...
Searching...
No Matches
i_enum.hpp File Reference
#include <neolib/neolib.hpp>
#include <iostream>
#include <neolib/core/reference_counted.hpp>
#include <neolib/core/string.hpp>
#include <neolib/core/map.hpp>

Go to the source code of this file.

Classes

struct  neolib::bad_enum_value
 
struct  neolib::bad_enum_string
 
class  neolib::i_basic_enum< UnderlyingType >
 
struct  neolib::i_basic_enum< UnderlyingType >::bad_enum_string
 

Namespaces

namespace  neolib
 

Macros

#define begin_declare_enum(enumName)
 
#define declare_enum_string(enumName, enumEnumerator)   { static_cast<std::underlying_type_t<enumName>>(enumName::enumEnumerator), neolib::string{ #enumEnumerator } },
 
#define declare_enum_string_explicit(enumName, enumEnumerator, enumString)   { static_cast<std::underlying_type_t<enumName>>(enumName::enumEnumerator), neolib::string{ #enumString } },
 
#define end_declare_enum(enumName)
 

Typedefs

template<typename Enum >
using neolib::enum_enumerators_t = multimap< std::underlying_type_t< Enum >, string >
 
template<typename T >
using neolib::i_enum_t = i_basic_enum< std::underlying_type_t< T > >
 
typedef i_basic_enum< uint8_tneolib::i_enum_u8
 
typedef i_basic_enum< uint16_tneolib::i_enum_u16
 
typedef i_basic_enum< uint32_tneolib::i_enum_u32
 
typedef i_basic_enum< uint64_tneolib::i_enum_u64
 
typedef i_basic_enum< int8_tneolib::i_enum_i8
 
typedef i_basic_enum< int16_tneolib::i_enum_i16
 
typedef i_basic_enum< int32_tneolib::i_enum_i32
 
typedef i_basic_enum< int64_tneolib::i_enum_i64
 
typedef i_enum_i32 neolib::i_enum
 

Functions

template<typename Enum >
enum_enumerators_t< Enum > constneolib::enum_enumerators ()
 
template<typename Enum >
std::string neolib::enum_to_hex (Enum aEnumValue)
 
template<typename Enum , typename StringT = string>
StringT neolib::enum_to_string (Enum aEnumerator, bool aMustEnumerate=false)
 
template<typename Enum >
Enum neolib::string_to_enum (const i_string &aEnumerator)
 
template<typename Enum >
Enum neolib::string_to_enum (const std::string &aEnumerator)
 
template<typename Enum >
std::optional< Enumneolib::try_string_to_enum (const i_string &aEnumerator)
 
template<typename Enum >
std::optional< Enumneolib::try_string_to_enum (const std::string &aEnumerator)
 
template<typename Enum , typename Char , typename Traits , typename = std::enable_if_t<std::is_enum_v<Enum>, sfinae>>
std::basic_istream< Char, Traits > & neolib::operator>> (std::basic_istream< Char, Traits > &aInput, Enum &aEnum)
 
template<typename Enum , typename Char , typename Traits , typename = std::enable_if_t<std::is_enum_v<Enum>, sfinae>>
std::basic_ostream< Char, Traits > & neolib::operator<< (std::basic_ostream< Char, Traits > &aOutput, const Enum &aEnum)
 
template<typename Enum , typename StringT = string>
StringT neolib::enum_to_string (const i_enum_t< Enum > &aEnumerator, bool aMustEnumerate=false)
 
template<typename Enum >
std::enable_if_t< std::is_enum_v< Enum >, boolneolib::operator== (const i_basic_enum< std::underlying_type_t< Enum > > &lhs, Enum rhs)
 
template<typename Enum >
std::enable_if_t< std::is_enum_v< Enum >, boolneolib::operator== (Enum lhs, const i_basic_enum< std::underlying_type_t< Enum > > &rhs)
 
template<typename Enum >
std::enable_if_t< std::is_enum_v< Enum >, boolneolib::operator!= (const i_basic_enum< std::underlying_type_t< Enum > > &lhs, Enum rhs)
 
template<typename Enum >
std::enable_if_t< std::is_enum_v< Enum >, boolneolib::operator!= (Enum lhs, const i_basic_enum< std::underlying_type_t< Enum > > &rhs)
 
template<typename Enum >
std::enable_if_t< std::is_enum_v< Enum >, boolneolib::operator< (const i_basic_enum< std::underlying_type_t< Enum > > &lhs, Enum rhs)
 
template<typename Enum >
std::enable_if_t< std::is_enum_v< Enum >, boolneolib::operator< (Enum lhs, const i_basic_enum< std::underlying_type_t< Enum > > &rhs)
 

Macro Definition Documentation

◆ begin_declare_enum

#define begin_declare_enum (   enumName)
Value:
template <> \
{ \
static neolib::enum_enumerators_t<enumName> const sEnumerators = \
{
ref_ptr< ConcreteType > make_ref(Args &&... args)
multimap< std::underlying_type_t< Enum >, string > enum_enumerators_t
Definition i_enum.hpp:47

Definition at line 52 of file i_enum.hpp.

◆ declare_enum_string

#define declare_enum_string (   enumName,
  enumEnumerator 
)    { static_cast<std::underlying_type_t<enumName>>(enumName::enumEnumerator), neolib::string{ #enumEnumerator } },

Definition at line 59 of file i_enum.hpp.

◆ declare_enum_string_explicit

#define declare_enum_string_explicit (   enumName,
  enumEnumerator,
  enumString 
)    { static_cast<std::underlying_type_t<enumName>>(enumName::enumEnumerator), neolib::string{ #enumString } },

Definition at line 60 of file i_enum.hpp.

◆ end_declare_enum

#define end_declare_enum (   enumName)
Value:
}; \
return sEnumerators; \
}

Definition at line 62 of file i_enum.hpp.