OpenBarnyard
 
Loading...
Searching...
No Matches
Defines.h
Go to the documentation of this file.
1#pragma once
2
3#define ISZERO( X ) ( ( X ) == 0 )
4#define NOTZERO( X ) ( !ISZERO( X ) )
5#define HASANYFLAG( STATE, FLAG ) ( ( ( STATE ) & ( FLAG ) ) != 0 )
6#define HASALLFLAGS( STATE, FLAGS ) ( ( ( STATE ) & ( FLAGS ) ) == ( FLAGS ) )
7#define STRINGIFY8( X ) #X
8#define STRINGIFY16( x ) L##x
9#define STRINGIFY( X ) STRINGIFY8( X )
10#define BITFLAG( x ) ( 1U << ( x ) )
11#define CONCATTOKEN( x, y ) x##y
12#define OVERRIDE override
13
14#define TVERSION( VER_MAJOR, VER_MINOR ) ( ( VER_MAJOR << 16U ) | VER_MINOR )
15
16#define RETURN_ARG_COUNT( _1_, _2_, _3_, _4_, _5_, count, ... ) count
17#define EXPAND_ARGS( args ) RETURN_ARG_COUNT args
18#define COUNT_ARGS_MAX5( ... ) EXPAND_ARGS( ( __VA_ARGS__, 5, 4, 3, 2, 1, 0 ) )
19
20#define OVERLOAD_MACRO2( name, count ) name##count
21#define OVERLOAD_MACRO1( name, count ) OVERLOAD_MACRO2( name, count )
22#define OVERLOAD_MACRO( name, count ) OVERLOAD_MACRO1( name, count )
23
24#define GLUE( x, y ) x y
25#define CALL_OVERLOAD( name, ... ) GLUE( OVERLOAD_MACRO( name, COUNT_ARGS_MAX5( __VA_ARGS__ ) ), ( __VA_ARGS__ ) )
26
27#ifdef TOSHI_DYNAMIC_LINKING
28
29# ifdef TOSHI_USER_ENGINE
30
31# define TOSHI_API declspec( dllexport )
32
33# else // TOSHI_USER_ENGINE
34
35# define TOSHI_API declspec( dllimport )
36
37# endif // !TOSHI_USER_ENGINE
38
39#else // TOSHI_DYNAMIC_LINKING
40
41# define TOSHI_API
42
43#endif // !TOSHI_DYNAMIC_LINKING
44
45#define TOSHI_NAMESPACE Toshi
46#define TOSHI_NAMESPACE_USING using namespace TOSHI_NAMESPACE;
47#define TOSHI_NAMESPACE_START \
48 namespace TOSHI_NAMESPACE \
49 {
50#define TOSHI_NAMESPACE_END }
51
52#ifdef TOSHI_FINAL
53# define TOSHI_NO_LOGS
54#endif
55
56#ifdef TOSHI_DEBUG
57# ifdef TOSHI_SKU_WINDOWS
58# define TBREAK() __debugbreak()
59# define TOSHI_ENABLE_ASSERTS
60# endif // TOSHI_SKU_WINDOWS
61#endif // TOSHI_DEBUG
62
63#ifndef TBREAK
64# define TBREAK()
65#endif // TBREAK
66
67#define TSTATICASSERT( ... ) static_assert( __VA_ARGS__, "Compile time assert failed: " #__VA_ARGS__ )
68#define TREINTERPRETCAST( TYPE, VALUE ) ( reinterpret_cast<TYPE>( VALUE ) )
69#define TSTATICCAST( POINTERTYPE, VALUE ) ( static_cast<POINTERTYPE*>( VALUE ) )
70#define TARRAYSIZE( ARRAY ) ( sizeof( ARRAY ) / sizeof( *ARRAY ) )
71#define TOFFSETOF( CLASS, MEMBER ) offsetof( CLASS, MEMBER )
72#define TALIGNAS( VALUE ) alignas( VALUE )
73#define TINLINE inline
74#define TFORCEINLINE __forceinline
75
76#define TANONYMOUSVAR_1( Y ) CONCATTOKEN( _anonymous, Y )
77#define TANONYMOUSVAR( TYPE ) TYPE TANONYMOUSVAR_1( __COUNTER__ )
78#define TANONYMOUSVARC( TYPE, COUNTER ) TYPE TANONYMOUSVAR_1( COUNTER )
79#define TANONYMOUSVARC_GET( TYPE, COUNTER ) TANONYMOUSVAR_1( COUNTER )
80
81#define TDEPRECATED [[deprecated]]
82#define TDEPRECATED_REASON( REASON ) [[deprecated( REASON )]]
83
84#define TDECLARE_POINTER_HANDLE( NAME ) typedef void* NAME
85
86#ifdef TOSHI_ENABLE_ASSERTS
87# define TCALL_ONCE_IF( CONDITION ) \
88 static TBOOL s_bFlag; \
89 if ( !s_bFlag && ( CONDITION ) && ( s_bFlag = TTRUE ) )
90# define TWIP() \
91 { \
92 TCALL_ONCE_IF( TTRUE ) \
93 { \
94 TWARN( "Work in progress: '%s', at line %d\n", __FUNCTION__, __LINE__ ); \
95 } \
96 }
97# define TTODO( DESC ) \
98 { \
99 TCALL_ONCE_IF( TTRUE ) \
100 { \
101 TWARN( "TODO: %s ('%s', at line %d)\n", DESC, __FUNCTION__, __LINE__ ); \
102 } \
103 }
104# define TFIXME( DESC ) \
105 { \
106 TCALL_ONCE_IF( TTRUE ) \
107 { \
108 TWARN( "FIXME: %s ('%s', at line %d)\n", DESC, __FUNCTION__, __LINE__ ); \
109 } \
110 }
111# define TIMPLEMENT() \
112 { \
113 TCALL_ONCE_IF( TTRUE ) \
114 { \
115 TWARN( "%s is not implemented\n", __FUNCTION__ ); \
116 } \
117 }
118# define TIMPLEMENT_D( DESC ) \
119 { \
120 TCALL_ONCE_IF( TTRUE ) \
121 { \
122 TWARN( "%s is not implemented: %s\n", __FUNCTION__, DESC ); \
123 } \
124 }
125# define TASSERT( X, ... ) \
126 { \
127 TCALL_ONCE_IF( !( X ) ) \
128 if ( 1 == TDebug_AssertHandler( #X, __FILE__, __LINE__, __VA_ARGS__ ) ) \
129 TBREAK(); \
130 }
131# define TVALIDPTR( PTR ) TASSERT( TDebug_IsValidAddress( PTR ) )
132#else // TOSHI_ENABLE_ASSERTS
133# define TWIP()
134# define TTODO( DESC )
135# define TFIXME( DESC )
136# define TIMPLEMENT()
137# define TIMPLEMENT_D( DESC )
138# define TASSERT( X, ... ) ( TFALSE )
139# define TVALIDPTR( PTR )
140#endif // TOSHI_ENABLE_ASSERTS
141
142#define TUNREACHABLE() \
143 { \
144 TASSERT( TFALSE, "Unreachable code is reached!" ); \
145 __assume( 0 ); \
146 }
147
148#ifndef TOSHI_NO_LOGS
149# define TLOGUP() Toshi::TUtil::LogUp();
150# define TLOGDOWN() Toshi::TUtil::LogDown();
151# define TINFO( ... ) Toshi::TUtil::Log( Toshi::TUtil::LogType_Info, __VA_ARGS__ )
152# define TWARN( ... ) Toshi::TUtil::Log( Toshi::TUtil::LogType_Warning, __VA_ARGS__ )
153# define TERROR( ... ) Toshi::TUtil::Log( Toshi::TUtil::LogType_Error, __VA_ARGS__ )
154# define TCRITICAL( ... ) Toshi::TUtil::Log( Toshi::TUtil::LogType_Critical, __VA_ARGS__ )
155# define TTRACE( ... ) TDebug_FinalPrintf( __VA_ARGS__ )
156#else // TOSHI_NO_LOGS
157# define TLOGUP()
158# define TLOGDOWN()
159# define TINFO( ... )
160# define TWARN( ... )
161# define TERROR( ... )
162# define TCRITICAL( ... )
163# define TTRACE( ... )
164#endif // TOSHI_NO_LOGS
165
166#ifndef TOSHI_USER_ENGINE
167# define TOSHI_USER_CLIENT
168#endif // !TOSHI_USER_ENGINE