Azaezel 2015-07-16 21:51:37 -05:00
parent 86e0e67496
commit 4bba5d87d0
5 changed files with 71 additions and 17 deletions

View file

@ -318,6 +318,10 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); }
DECLARE_ENUM( type ); \ DECLARE_ENUM( type ); \
DefineConsoleType( Type ## type, type ); DefineConsoleType( Type ## type, type );
#define DefineEnumType_R( type ) \
DECLARE_ENUM_R( type ); \
DefineConsoleType( Type ## type, type );
#define _ConsoleEnumType( typeName, type, nativeType ) \ #define _ConsoleEnumType( typeName, type, nativeType ) \
S32 type; \ S32 type; \
ImplementConsoleTypeCasters( type, nativeType ) \ ImplementConsoleTypeCasters( type, nativeType ) \
@ -347,6 +351,10 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); }
DECLARE_BITFIELD( type ); \ DECLARE_BITFIELD( type ); \
DefineConsoleType( Type ## type, type ); DefineConsoleType( Type ## type, type );
#define DefineBitfieldType_R( type ) \
DECLARE_BITFIELD_R( type ); \
DefineConsoleType( Type ## type, type );
#define _ConsoleBitfieldType( typeName, type, nativeType ) \ #define _ConsoleBitfieldType( typeName, type, nativeType ) \
S32 type; \ S32 type; \
ImplementConsoleTypeCasters( type, nativeType ) \ ImplementConsoleTypeCasters( type, nativeType ) \

View file

@ -34,14 +34,14 @@
DECLARE_PRIMITIVE( bool ); DECLARE_PRIMITIVE_R( bool );
DECLARE_PRIMITIVE( S8 ); DECLARE_PRIMITIVE_R(S8);
DECLARE_PRIMITIVE( U8 ); DECLARE_PRIMITIVE_R(U8);
DECLARE_PRIMITIVE( S32 ); DECLARE_PRIMITIVE_R(S32);
DECLARE_PRIMITIVE( U32 ); DECLARE_PRIMITIVE_R(U32);
DECLARE_PRIMITIVE( F32 ); DECLARE_PRIMITIVE_R(F32);
DECLARE_PRIMITIVE( F64 ); DECLARE_PRIMITIVE_R(F64);
DECLARE_PRIMITIVE( void* ); DECLARE_PRIMITIVE_R(void*);
//FIXME: this allows String to be used as a struct field type //FIXME: this allows String to be used as a struct field type
@ -52,7 +52,7 @@ DECLARE_PRIMITIVE( void* );
// are considered to be owned by the API layer itself. The rule here is that such // are considered to be owned by the API layer itself. The rule here is that such
// a string is only valid until the next API call is made. Usually, control layers // a string is only valid until the next API call is made. Usually, control layers
// will immediately copy and convert strings to their own string type. // will immediately copy and convert strings to their own string type.
_DECLARE_TYPE( String ); _DECLARE_TYPE_R(String);
template<> template<>
struct EngineTypeTraits< String > : public _EnginePrimitiveTypeTraits< String > struct EngineTypeTraits< String > : public _EnginePrimitiveTypeTraits< String >
{ {

View file

@ -41,11 +41,11 @@ class ColorI;
class ColorF; class ColorF;
DECLARE_STRUCT( Vector< bool > ); DECLARE_STRUCT_R(Vector< bool >);
DECLARE_STRUCT( Vector< S32 > ); DECLARE_STRUCT_R(Vector< S32 >);
DECLARE_STRUCT( Vector< F32 > ); DECLARE_STRUCT_R(Vector< F32 >);
DECLARE_STRUCT( Torque::UUID ); DECLARE_STRUCT_R(Torque::UUID);
DECLARE_STRUCT( ColorI ); DECLARE_STRUCT_R(ColorI);
DECLARE_STRUCT( ColorF ); DECLARE_STRUCT_R(ColorF);
#endif // !_ENGINESTRUCTS_H_ #endif // !_ENGINESTRUCTS_H_

View file

@ -44,7 +44,7 @@ enum EngineTypeKind
EngineTypeKindClass ///< Pointer to opaque EngineObject. EngineTypeKindClass ///< Pointer to opaque EngineObject.
}; };
DECLARE_ENUM( EngineTypeKind ); DECLARE_ENUM_R( EngineTypeKind );
/// Flags for an EngineTypeInfo. /// Flags for an EngineTypeInfo.
enum EngineTypeFlags enum EngineTypeFlags

View file

@ -416,6 +416,16 @@ namespace _Private {
#define _DECLARE_TYPE( type ) \ #define _DECLARE_TYPE( type ) \
template<> const EngineTypeInfo* TYPE< type >(); \
template<> struct _SCOPE< type > { \
EngineExportScope& operator()() const { \
return *static_cast< EngineExportScope* >( \
const_cast< EngineTypeInfo* >( ( TYPE< type >() ) ) \
); \
} \
};
#define _DECLARE_TYPE_R( type ) \
template<> const EngineTypeInfo* TYPE< type >(); \ template<> const EngineTypeInfo* TYPE< type >(); \
template<> struct _SCOPE< type > { \ template<> struct _SCOPE< type > { \
EngineExportScope& operator()() const { \ EngineExportScope& operator()() const { \
@ -432,22 +442,42 @@ namespace _Private {
_DECLARE_TYPE( type ) \ _DECLARE_TYPE( type ) \
template<> \ template<> \
struct EngineTypeTraits< type > : public _EnginePrimitiveTypeTraits< type > {}; struct EngineTypeTraits< type > : public _EnginePrimitiveTypeTraits< type > {};
#define _DECLARE_PRIMITIVE_R( type ) \
_DECLARE_TYPE_R( type ) \
template<> \
struct EngineTypeTraits< type > : public _EnginePrimitiveTypeTraits< type > {};
#define _DECLARE_ENUM( type ) \ #define _DECLARE_ENUM( type ) \
_DECLARE_TYPE( type ) \ _DECLARE_TYPE( type ) \
template<> \ template<> \
struct _EngineTypeTraits< type > : public _EngineEnumTypeTraits< type > {}; struct _EngineTypeTraits< type > : public _EngineEnumTypeTraits< type > {};
#define _DECLARE_ENUM_R( type ) \
_DECLARE_TYPE_R( type ) \
template<> \
struct _EngineTypeTraits< type > : public _EngineEnumTypeTraits< type > {};
#define _DECLARE_BITFIELD( type ) \ #define _DECLARE_BITFIELD( type ) \
_DECLARE_TYPE( type ) \ _DECLARE_TYPE( type ) \
template<> \ template<> \
struct _EngineTypeTraits< type > : public _EngineBitfieldTypeTraits< type > {}; struct _EngineTypeTraits< type > : public _EngineBitfieldTypeTraits< type > {};
#define _DECLARE_BITFIELD_R( type ) \
_DECLARE_TYPE_R( type ) \
template<> \
struct _EngineTypeTraits< type > : public _EngineBitfieldTypeTraits< type > {};
#define _DECLARE_STRUCT( type ) \ #define _DECLARE_STRUCT( type ) \
_DECLARE_TYPE( type ) \ _DECLARE_TYPE( type ) \
template<> \ template<> \
struct _EngineTypeTraits< type > : public _EngineStructTypeTraits< type > {}; struct _EngineTypeTraits< type > : public _EngineStructTypeTraits< type > {};
#define _DECLARE_STRUCT_R( type ) \
_DECLARE_TYPE_R( type ) \
template<> \
struct _EngineTypeTraits< type > : public _EngineStructTypeTraits< type > {};
#define _IMPLEMENT_TYPE( type, exportName ) \ #define _IMPLEMENT_TYPE( type, exportName ) \
template<> \ template<> \
@ -524,6 +554,10 @@ namespace _Private {
#define DECLARE_PRIMITIVE( type ) \ #define DECLARE_PRIMITIVE( type ) \
_DECLARE_PRIMITIVE( type ) _DECLARE_PRIMITIVE( type )
///
#define DECLARE_PRIMITIVE_R( type ) \
_DECLARE_PRIMITIVE_R( type )
/// ///
#define IMPLEMENT_PRIMITIVE( type, exportName, scope, doc ) \ #define IMPLEMENT_PRIMITIVE( type, exportName, scope, doc ) \
_IMPLEMENT_PRIMITIVE( type, exportName, scope, doc ) _IMPLEMENT_PRIMITIVE( type, exportName, scope, doc )
@ -531,11 +565,19 @@ namespace _Private {
/// ///
#define DECLARE_ENUM( type ) \ #define DECLARE_ENUM( type ) \
_DECLARE_ENUM( type ) _DECLARE_ENUM( type )
///
#define DECLARE_ENUM_R( type ) \
_DECLARE_ENUM_R( type )
/// ///
#define DECLARE_BITFIELD( type ) \ #define DECLARE_BITFIELD( type ) \
_DECLARE_BITFIELD( type ) _DECLARE_BITFIELD( type )
///
#define DECLARE_BITFIELD_R( type ) \
_DECLARE_BITFIELD_R( type )
/// ///
#define IMPLEMENT_ENUM( type, exportName, scope, doc ) \ #define IMPLEMENT_ENUM( type, exportName, scope, doc ) \
_IMPLEMENT_ENUM( type, exportName, scope, doc ) _IMPLEMENT_ENUM( type, exportName, scope, doc )
@ -556,6 +598,10 @@ namespace _Private {
#define DECLARE_STRUCT( type ) \ #define DECLARE_STRUCT( type ) \
_DECLARE_STRUCT( type ) _DECLARE_STRUCT( type )
///
#define DECLARE_STRUCT_R( type ) \
_DECLARE_STRUCT_R( type )
/// ///
#define IMPLEMENT_STRUCT( type, exportName, scope, doc ) \ #define IMPLEMENT_STRUCT( type, exportName, scope, doc ) \
_IMPLEMENT_STRUCT( type, exportName, scope, doc ) _IMPLEMENT_STRUCT( type, exportName, scope, doc )