HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TfEnum Class Reference

#include <enum.h>

Public Member Functions

 TfEnum ()
 Default constructor assigns integer value zero. More...
 
template<class T >
 TfEnum (T value, std::enable_if_t< std::is_enum< T >::value > *=0)
 Initializes value to enum variable value of enum type T. More...
 
 TfEnum (const std::type_info &ti, int value)
 
bool operator== (const TfEnum &t) const
 True if *this and t have both the same type and value. More...
 
bool operator!= (const TfEnum &t) const
 
bool operator< (const TfEnum &t) const
 
bool operator<= (const TfEnum &t) const
 
bool operator> (const TfEnum &t) const
 
bool operator>= (const TfEnum &t) const
 
template<class T >
std::enable_if_t< std::is_enum
< T >::value, bool > 
operator== (T value) const
 True if *this has been assigned with value. More...
 
template<class T >
std::enable_if_t< std::is_enum
< T >::value, bool > 
operator!= (T value) const
 False if *this has been assigned with value. More...
 
template<class T >
bool IsA () const
 True if *this has been assigned any enumerated value of type T. More...
 
bool IsA (const std::type_info &t) const
 
const std::type_info & GetType () const
 Returns the type of the enum value, as an std::type_info. More...
 
const intGetValueAsInt () const
 Returns the integral value of the enum value. More...
 
template<typename T >
T GetValue () const
 
template<typename T , typename = typename std::enable_if< std::is_integral<T>::value || std::is_enum<T>::value>::type>
 operator T () const
 Conversion operator for enum and integral types only. More...
 

Static Public Member Functions

static TF_API void _AddName (TfEnum val, const std::string &valName, const std::string &displayName="")
 
static void AddName (TfEnum val, const std::string &valName, const std::string &displayName="")
 
template<typename T >
static TfEnum IntegralEnum (T value)
 
Retrieving Corresponding Names and Enumerated Values

The methods in this group can be used to retrieve corresponding names and values. The correspondences are set up with the TF_ADD_ENUM_NAME() macro.

static TF_API std::string GetName (TfEnum val)
 
static TF_API std::string GetFullName (TfEnum val)
 
static TF_API std::string GetDisplayName (TfEnum val)
 
static std::vector< std::stringGetAllNames (TfEnum val)
 
static TF_API std::vector
< std::string
GetAllNames (const std::type_info &ti)
 
template<class T >
static std::vector< std::stringGetAllNames ()
 
static TF_API const
std::type_info * 
GetTypeFromName (const std::string &typeName)
 
template<class T >
static T GetValueFromName (const std::string &name, bool *foundIt=NULL)
 
static TF_API TfEnum GetValueFromName (const std::type_info &ti, const std::string &name, bool *foundIt=NULL)
 
static TF_API TfEnum GetValueFromFullName (const std::string &fullname, bool *foundIt=NULL)
 
static TF_API bool IsKnownEnumType (const std::string &typeName)
 

Friends

template<class T >
std::enable_if_t< std::is_enum
< T >::value, bool > 
operator== (T val, TfEnum const &e)
 Compare a literal enum value val of enum type T with TfEnum e. More...
 
template<class T >
std::enable_if_t< std::is_enum
< T >::value, bool > 
operator!= (T val, TfEnum const &e)
 Compare a literal enum value val of enum type T with TfEnum e. More...
 

Detailed Description

An enum class that records both enum type and enum value.

Run-Time Typing

A TfEnum can hold an enum variable of any enum type, while still being able to distinguish between various enum types. Here is an example:

enum Monsters { SULLEY = 0, MIKE, ROZ };
enum Fish { NEMO = 0, FATHER, DORY };
TfEnum t1 = MIKE,
t2 = NEMO;
t1 == MIKE; // yields true
t2 == NEMO; // yields true
t1 == t2; // yields false
t1 == SULLEY; // yields false
t1.IsA<Monsters>(); // yields true
t1.IsA<Fish>(); // yields false

Even though NEMO and SULLEY both are represented with integral value zero, t1 and t2 compare false. A TfEnum can be passed by value, assigned, etc. just like a regular Enum variable. A TfEnum can also hold a plain integer, which will compare false against any other enum variable.

Associating Names with Enumerated Values

The TfEnum class can also be used to represent enumerated values as strings. This can be useful for storing enum values in files for later retrieval.

Use the TF_ADD_ENUM_NAME() macro to set up and enable strings for the values of an enum. Once this is done, several static TfEnum methods may be used to look up names corresponding to enum values and vice-versa.

For example, see TfRegistryManager to understand the use of the TF_REGISTRY_FUNCTION() macro below:

Enum Registration Macro

// header file
// Declare an enumerated type with some values
enum Season {
SPRING,
SUMMER = 3, // It's ok to have initializers
AUTUMN,
WINTER
};
// source file
// Register the names for the values:
}
// another source file:
// Look up the name for a value:
string name1 = TfEnum::GetName(SUMMER); // Returns "SUMMER"
string name2 = TfEnum::GetFullName(SUMMER); // Returns "Season::SUMMER"
// Look up the value for a name:
bool found;
Season s1 = TfEnum::GetValueFromName<Season>("AUTUMN", &found);
// Returns 4, sets found to true
Season s2 = TfEnum::GetValueFromName<Season>("MONDAY", &found);
// Returns -1, sets found to false
// Look up a fully-qualified name. Since this is not a templated
// function, it has to return a generic value type, so we use
// TfEnum.
TfEnum s3 = TfEnum::GetValueFromFullName("Season::WINTER", &found);
// Returns 5, sets found to \c true

Definition at line 137 of file enum.h.

Constructor & Destructor Documentation

TfEnum::TfEnum ( )
inline

Default constructor assigns integer value zero.

Definition at line 141 of file enum.h.

template<class T >
TfEnum::TfEnum ( T  value,
std::enable_if_t< std::is_enum< T >::value > *  = 0 
)
inline

Initializes value to enum variable value of enum type T.

Definition at line 148 of file enum.h.

TfEnum::TfEnum ( const std::type_info &  ti,
int  value 
)
inline

Initializes value to integral value value with enum type ti.

Warning
This is only for use in extreme circumstances; there is no way for an implementation to guarantee that ti is really an enum type, and/or that value is a valid value for that enum type.

Definition at line 159 of file enum.h.

Member Function Documentation

static TF_API void TfEnum::_AddName ( TfEnum  val,
const std::string valName,
const std::string displayName = "" 
)
static

Associates a name with an enumerated value.

Warning
This method is called by the TF_ADD_ENUM_NAME() macro, and should NOT be called directly. Instead, call AddName(), which does exactly the same thing.
static void TfEnum::AddName ( TfEnum  val,
const std::string valName,
const std::string displayName = "" 
)
inlinestatic

Associates a name with an enumerated value.

See Also
_AddName().

Definition at line 397 of file enum.h.

static std::vector<std::string> TfEnum::GetAllNames ( TfEnum  val)
inlinestatic

Returns a vector of all the names associated with an enum type.

This returns a vector of all the names associated with the enum that contains the type val. The names are not fully qualified. For example, TfEnum::GetAllNames(WINTER) would return a vector containing "SPRING", "SUMMER", "AUTUMN", and "WINTER".

If there are no such names registered, an empty vector is returned.

Definition at line 317 of file enum.h.

static TF_API std::vector<std::string> TfEnum::GetAllNames ( const std::type_info &  ti)
static

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<class T >
static std::vector<std::string> TfEnum::GetAllNames ( )
inlinestatic

Returns a vector of all the names associated with an enum type.

This returns a vector of all the names associated with the enum type T. The names are not fully qualified. For example, TfEnum::GetAllNames<Season>() would return a vector containing "SPRING", "SUMMER", "AUTUMN", and "WINTER".

If there are no such names registered, an empty vector is returned.

Definition at line 333 of file enum.h.

static TF_API std::string TfEnum::GetDisplayName ( TfEnum  val)
static

Returns the display name for an enumerated value.

This returns a user interface-suitable string for the given enumerated value.

static TF_API std::string TfEnum::GetFullName ( TfEnum  val)
static

Returns the fully-qualified name for an enumerated value.

This returns a fully-qualified enumerated value name (e.g., "Season::WINTER") associated with the given value. If there is no such name registered, an empty string is returned.

static TF_API std::string TfEnum::GetName ( TfEnum  val)
static

Returns the name associated with an enumerated value.

If there is no such name registered, an empty string is returned.

const std::type_info& TfEnum::GetType ( ) const
inline

Returns the type of the enum value, as an std::type_info.

Definition at line 244 of file enum.h.

static TF_API const std::type_info* TfEnum::GetTypeFromName ( const std::string typeName)
static

Returns the typeid for a given enum type name.

This returns a pointer to the type_info associated with the enum that has the type name typeName. If no such enum is registered, returns NULL.

template<typename T >
T TfEnum::GetValue ( ) const
inline

Returns the enum value for the enum type T.

Warning
This function can cause your program to abort if not used properly.

If it is possible that the enum value is not of type T, first use IsA() to test whether the enum value is of type T before calling GetValue<T>().

Note that if IsA<T>() succeeds, then GetValue<T>() will also succeed.

Definition at line 265 of file enum.h.

const int& TfEnum::GetValueAsInt ( ) const
inline

Returns the integral value of the enum value.

Definition at line 249 of file enum.h.

static TF_API TfEnum TfEnum::GetValueFromFullName ( const std::string fullname,
bool *  foundIt = NULL 
)
static

Returns the enumerated value for a fully-qualified name.

This takes a fully-qualified enumerated value name (e.g., "Season::WINTER") and returns the associated value. If there is no such name, this returns -1. Since -1 can sometimes be a valid value, the foundIt flag pointer, if not NULL, is set to true if the name was found and false otherwise. Also, since this is not a templated function, it has to return a generic value type, so we use TfEnum.

template<class T >
static T TfEnum::GetValueFromName ( const std::string name,
bool *  foundIt = NULL 
)
inlinestatic

Returns the enumerated value for a name.

If there is no such name registered, this returns -1. Since -1 can sometimes be a valid value, the foundIt flag pointer, if not NULL, is set to true if the name was found and false otherwise.

Definition at line 351 of file enum.h.

static TF_API TfEnum TfEnum::GetValueFromName ( const std::type_info &  ti,
const std::string name,
bool *  foundIt = NULL 
)
static

Returns the enumerated value for a name.

This is a template-independent version of GetValueFromName().

template<typename T >
static TfEnum TfEnum::IntegralEnum ( T  value)
inlinestatic

Definition at line 404 of file enum.h.

template<class T >
bool TfEnum::IsA ( ) const
inline

True if *this has been assigned any enumerated value of type T.

Definition at line 233 of file enum.h.

bool TfEnum::IsA ( const std::type_info &  t) const
inline

True if *this has been assigned any enumerated value of type T with typeid(T)==t.

Definition at line 239 of file enum.h.

static TF_API bool TfEnum::IsKnownEnumType ( const std::string typeName)
static

Returns true if typeName is a known enum type.

If any enum whose demangled type name is typeName has been added via TF_ADD_ENUM_NAME(), this function returns true.

template<typename T , typename = typename std::enable_if< std::is_integral<T>::value || std::is_enum<T>::value>::type>
TfEnum::operator T ( ) const
inline

Conversion operator for enum and integral types only.

Definition at line 278 of file enum.h.

bool TfEnum::operator!= ( const TfEnum t) const
inline

Inequality operator

See Also
TfEnum::operator==(const TfEnum&)

Definition at line 172 of file enum.h.

template<class T >
std::enable_if_t<std::is_enum<T>::value, bool> TfEnum::operator!= ( T  value) const
inline

False if *this has been assigned with value.

Definition at line 213 of file enum.h.

bool TfEnum::operator< ( const TfEnum t) const
inline

Less than comparison. Enum values belonging to the same type are ordered according to their numeric value. Enum values belonging to different types are ordered in a consistent but arbitrary way which may vary between program runs.

Definition at line 180 of file enum.h.

bool TfEnum::operator<= ( const TfEnum t) const
inline

Less than or equal operator

See Also
TfEnum::operator<(const TfEnum&)

Definition at line 187 of file enum.h.

bool TfEnum::operator== ( const TfEnum t) const
inline

True if *this and t have both the same type and value.

Definition at line 165 of file enum.h.

template<class T >
std::enable_if_t<std::is_enum<T>::value, bool> TfEnum::operator== ( T  value) const
inline

True if *this has been assigned with value.

Definition at line 206 of file enum.h.

bool TfEnum::operator> ( const TfEnum t) const
inline

Greater than operator

See Also
TfEnum::operator<(const TfEnum&)

Definition at line 193 of file enum.h.

bool TfEnum::operator>= ( const TfEnum t) const
inline

Greater than or equal operator

See Also
TfEnum::operator<(const TfEnum&)

Definition at line 199 of file enum.h.

Friends And Related Function Documentation

template<class T >
std::enable_if_t<std::is_enum<T>::value, bool> operator!= ( T  val,
TfEnum const e 
)
friend

Compare a literal enum value val of enum type T with TfEnum e.

Definition at line 227 of file enum.h.

template<class T >
std::enable_if_t<std::is_enum<T>::value, bool> operator== ( T  val,
TfEnum const e 
)
friend

Compare a literal enum value val of enum type T with TfEnum e.

Definition at line 220 of file enum.h.


The documentation for this class was generated from the following file: