Files
TrinityCore/dep/include/g3dlite/G3D/enumclass.h
click e777161888 HIGHLY EXPERIMENTAL - USE AT YOUR OWN RISK
Implement the use of the new vmap3-format by Lynx3d (mad props to you for this, and thanks for the talks earlier)
+ reduced Vmap size to less than one third, and improve precision
+ indoor/outdoor check which allows automatic unmounting of players
+ additional area information from WMOAreaTable.dbc, removed existing "hacks"
+ WMO liquid information for swimming and fishing correctly in buildings/cities/caves/instances (lava and slime WILL hurt from now on!)
- buildfiles for windows are not properly done, and will need to be sorted out
NOTE: Do NOT annoy Lynx3d about this, any issues with this "port" is entirely our fault !
THIS REVISION IS CONSIDERED UNSTABLE AND CONTAINS WORK IN PROGRESS - USE AT YOUR OWN RISK!

--HG--
branch : trunk
2010-06-05 00:59:25 +02:00

148 lines
4.1 KiB
C++

/**
@file G3D/enumclass.h
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
@created 2007-01-27
@edited 2007-07-20
*/
#ifndef G3D_enumclass_h
#define G3D_enumclass_h
#include "G3D/HashTrait.h"
#include "G3D/BinaryInput.h"
#include "G3D/BinaryOutput.h"
/**
\def G3D_DECLARE_ENUM_CLASS_METHODS
\brief Creates a series of methods that turn a class into a scoped enumeration.
Uses the "Intelligent Enum" design pattern
http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4001/
Enum classes are initialized to their zero value by default.
See GLG3D/GKey.h for an example.
\sa G3D_DECLARE_ENUM_CLASS_HASHCODE
*/
#define G3D_DECLARE_ENUM_CLASS_METHODS(Classname)\
inline Classname(char v) : value((Value)v) {}\
\
inline Classname() : value((Value)0) {}\
\
inline Classname(const Value v) : value(v) {}\
\
explicit inline Classname(int v) : value((Value)v) {}\
\
/** Support cast back to the Value type, which is needed to allow implicit assignment inside unions. */\
/*inline operator Value() const {
return value;
}*/\
\
inline operator int() const {\
return (int)value;\
}\
\
inline bool operator== (const Classname other) const {\
return value == other.value;\
}\
\
inline bool operator== (const Classname::Value other) const {\
return value == other;\
}\
\
inline bool operator!= (const Classname other) const {\
return value != other.value;\
}\
\
inline bool operator!= (const Classname::Value other) const {\
return value != other;\
}\
\
inline bool operator< (const Classname other) const {\
return value < other.value;\
}\
\
inline bool operator> (const Classname other) const {\
return value > other.value;\
}\
\
inline bool operator>= (const Classname other) const {\
return value >= other.value;\
}\
\
inline bool operator<= (const Classname other) const {\
return value <= other.value;\
}\
\
inline bool operator< (const Value other) const {\
return value < other;\
}\
\
inline bool operator> (const Value other) const {\
return value > other;\
}\
\
inline bool operator<= (const Value other) const {\
return value <= other;\
}\
\
inline bool operator>= (const Value other) const {\
return value >= other;\
}\
\
inline Classname& operator-- () {\
value = (Value)((int)value - 1);\
return *this;\
}\
\
inline Classname& operator++ () {\
value = (Value)((int)value + 1);\
return *this;\
}\
\
inline Classname& operator+= (const int x) {\
value = (Value)((int)value + x);\
return *this;\
}\
\
inline Classname& operator-= (const int x) {\
value = (Value)((int)value - x);\
return *this;\
}\
\
inline Classname operator+ (const int x) const {\
return Classname((int)value + x);\
}\
\
inline Classname operator- (const int x) const {\
return Classname((int)value - x);\
}\
\
inline unsigned int hashCode() const {\
return (unsigned int)value;\
}\
\
inline void serialize(BinaryOutput& b) const {\
b.writeInt32(value);\
}\
\
inline void deserialize(BinaryInput& b) {\
value = (Value)b.readInt32();\
}
/** \def G3D_DECLARE_ENUM_CLASS_HASHCODE
*/
#define G3D_DECLARE_ENUM_CLASS_HASHCODE(Classname)\
template <> struct HashTrait<Classname::Value> \
{ \
static size_t hashCode(Classname::Value key) { return static_cast<size_t>(key); } \
}; \
\
template <> struct HashTrait<Classname> \
{ \
static size_t hashCode(Classname key) { return static_cast<size_t>(key.hashCode()); } \
};
#endif