My Project  + 80db3
Classes | Macros | Functions
enum.hpp File Reference

Utilities to associate strings with enum values. More...

#include <stddef.h>
#include <ostream>
#include <boost/range/size.hpp>
#include <boost/utility/enable_if.hpp>
#include "util/console.hpp"
#include "util/flags.hpp"
Include dependency graph for enum.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  get_enum< Enum >
 
struct  get_enum< flags< Enum > >
 
struct  enum_names< Enum >
 

Macros

#define NAMED_ENUM(Enum)
 
#define NAMED_FLAGS(Flags)
 
#define NAMES(Enum, Name, ...)
 
#define USE_ENUM_NAMES(Enum)
 
#define USE_FLAG_NAMES(Flags)
 

Functions

template<class Enum >
boost::enable_if_c< enum_names< Enum >::named, std::ostream & >::type operator<< (std::ostream &os, Enum value)
 
template<class Enum >
std::ostream & operator<< (std::ostream &os, flags< Enum > _flags)
 

Detailed Description

Utilities to associate strings with enum values.

Definition in file enum.hpp.

Macro Definition Documentation

◆ NAMED_ENUM

#define NAMED_ENUM (   Enum)
Value:
template <> struct enum_names<get_enum<Enum>::type> { \
enum { named = 1 }; \
static const char * name; \
static const char * names[]; \
static const size_t count; \
};
const size_t count
Definition: enum.hpp:50
const char * name
Definition: enum.hpp:52
const char * names[1]
Definition: enum.hpp:54

Definition at line 58 of file enum.hpp.

◆ NAMED_FLAGS

#define NAMED_FLAGS (   Flags)
Value:
NAMED_ENUM(Flags)
#define FLAGS_OVERLOADS(Flagname)
Declare overloaded operators and enum_size for a flag type.
Definition: flags.hpp:215

Definition at line 66 of file enum.hpp.

◆ NAMES

#define NAMES (   Enum,
  Name,
  ... 
)
Value:
const char * enum_names<get_enum<Enum>::type>::name = (Name); \
const char * enum_names<get_enum<Enum>::type>::names[] = { __VA_ARGS__ }; \
const size_t enum_names<get_enum<Enum>::type>::count \
= size_t(boost::size(enum_names<get_enum<Enum>::type>::names));
std::string name
Definition: goggalaxy.cpp:180
Enum type
Definition: enum.hpp:40

Definition at line 70 of file enum.hpp.

◆ USE_ENUM_NAMES

#define USE_ENUM_NAMES (   Enum)
Value:
std::string name
Definition: goggalaxy.cpp:180
Enum type
Definition: enum.hpp:40

Definition at line 76 of file enum.hpp.

◆ USE_FLAG_NAMES

#define USE_FLAG_NAMES (   Flags)
Value:
USE_ENUM_NAMES(Flags)
#define USE_FLAGS_OVERLOADS(Flagname)
Definition: flags.hpp:219

Definition at line 81 of file enum.hpp.

Function Documentation

◆ operator<<() [1/2]

template<class Enum >
boost::enable_if_c<enum_names<Enum>::named, std::ostream &>::type operator<< ( std::ostream &  os,
Enum  value 
)

Definition at line 87 of file enum.hpp.

◆ operator<<() [2/2]

template<class Enum >
std::ostream& operator<< ( std::ostream &  os,
flags< Enum >  _flags 
)

Definition at line 98 of file enum.hpp.