Basic types.
More...
Go to the source code of this file.
Detailed Description
Basic types.
- LastChangedDate:
- 2009-12-18 16:29:35 -0500 (Fri, 18 Dec 2009)
- Author:
- Jim E. Brooks http://www.palomino3d.org
Define Documentation
| #define DECLARE_DISTINCT_TYPE |
( |
|
CLASS, |
|
|
|
T, |
|
|
|
CONV_FUNC | |
|
) |
| | |
Value:class CLASS \
{ \
public: \
typedef T value_type; \
CLASS( void ) : mVal(0) { } \
CLASS( T val ) : mVal(val) { } \
T CONV_FUNC( void ) const { return mVal; } \
operator T() const { return mVal; } \
CLASS& operator=( const T& val ) { mVal = val; return *this; } \
friend bool operator==( const CLASS a, const CLASS b ) { return a.mVal == b.mVal; } \
friend bool operator!=( const CLASS a, const CLASS b ) { return a.mVal != b.mVal; } \
\
\
private: \
T mVal; \
};
Macro to turn a fundamental type into a distinct class.
/// For example:
/// DECLARE_DISTINCT_TYPE( Radian, fp )
/// DECLARE_DISTINCT_TYPE( Degree, fp )
/// BTW, this can't done using a template class and typedefs
/// as the typedefs would still be the same type eg:
/// typedef Distinct<fp> Radian;
/// typedef Distinct<fp> Degree;
///
---------------------------------------------------------------------------- NOTE: DECLARE_DISTINCT_TYPE() MIGHT CAUSE BUGS IF NOT CAREFUL! !!!!! DECLARE_DISTINCT_TYPE() allows implied conversion to fundamental type! Instead use DECLARE_DISTINCT_TYPE_STRICT() to force explicit conversion. ----------------------------------------------------------------------------
| #define DECLARE_DISTINCT_TYPE_STRICT |
( |
|
CLASS, |
|
|
|
T, |
|
|
|
CONV_FUNC | |
|
) |
| | |
Value:class CLASS \
{ \
public: \
typedef T value_type; \
CLASS( void ) : mVal(0) { } \
explicit CLASS( T val ) : mVal(val) { } \
\
T CONV_FUNC( void ) const { return mVal; } \
\
CLASS& operator=( const CLASS src ) { mVal = src.mVal; return *this; } \
CLASS& operator+=( const CLASS src ) { mVal += src.mVal; return *this; } \
CLASS& operator-=( const CLASS src ) { mVal -= src.mVal; return *this; } \
CLASS& operator*=( const CLASS src ) { mVal *= src.mVal; return *this; } \
CLASS& operator/=( const CLASS src ) { mVal /= src.mVal; return *this; } \
friend CLASS operator+( CLASS a, CLASS b ) { return CLASS(a.mVal + b.mVal); } \
friend CLASS operator-( CLASS a, CLASS b ) { return CLASS(a.mVal - b.mVal); } \
friend CLASS operator*( CLASS a, CLASS b ) { return CLASS(a.mVal * b.mVal); } \
friend CLASS operator/( CLASS a, CLASS b ) { return CLASS(a.mVal / b.mVal); } \
friend CLASS operator-( CLASS a ) { return CLASS(-a.mVal); } \
friend bool operator==( const CLASS a, const CLASS b ) { return a.mVal == b.mVal; } \
friend bool operator!=( const CLASS a, const CLASS b ) { return a.mVal != b.mVal; } \
friend bool operator>( CLASS a, CLASS b ) { return a.mVal > b.mVal; } \
friend bool operator<( CLASS a, CLASS b ) { return a.mVal < b.mVal; } \
friend bool operator>=( CLASS a, CLASS b ) { return a.mVal >= b.mVal; } \
friend bool operator<=( CLASS a, CLASS b ) { return a.mVal <= b.mVal; } \
private: \
T mVal; \
};
| #define UINT_CAST |
( |
|
U |
) |
(static_cast<unsigned int>((U))) |
| #define ULONG_CAST |
( |
|
U |
) |
(static_cast<unsigned long>((U))) |
| #define virtual VIRTUAL_METHODS_IN_BASIC_TYPES_IS_TOO_SLOW |
Typedef Documentation
| typedef unsigned char Bool |
| typedef unsigned char uchar |
| typedef unsigned int uint |
| typedef unsigned long ulong |