29 #ifndef ARRAY_INCLUDED
30 #define ARRAY_INCLUDED
36 #define ASSERT( x ) { if( !( x ) ) __debugbreak(); }
39 #define ASSERT( x ) { if( !( x ) ) _asm{ int 0x03 } }
41 #define ASSERT( x ) { if( !( x ) ) exit(0); }
49 void* mem = malloc(
size + align +
sizeof(
void* ) );
51 char* amem = ( (
char*)mem ) +
sizeof(
void* );
53 amem = (
char* )( ( (
size_t)( ( (
char*)amem ) + (align-1) ) ) & ~( align-1 ) );
55 ( (
void** ) amem )[-1] = mem;
61 #pragma message ( "[WARNING] Array debugging is enabled" )
63 #define Pointer( ... ) Array< __VA_ARGS__ >
64 #define ConstPointer( ... ) ConstArray< __VA_ARGS__ >
65 #define NullPointer( ... ) Array< __VA_ARGS__ >()
66 template<
class C >
void FreePointer( Array< C >& a ){ a.Free( ); }
68 template<
class C >
void VFreePointer( Array< C >& a ){ a.Free( ); }
69 template<
class C >
void DeletePointer( Array< C >& a ){ a.Delete( ); }
76 template<
class C > C*
PointerAddress( Array< C >& a ) {
return a.pointer(); }
77 template<
class C >
const C*
PointerAddress( ConstArray< C >& a ) {
return a.pointer(); }
78 template<
class C > Array< C >
GetPointer( C& c ) {
return Array< C >::FromPointer( &c , 1 ); }
79 template<
class C > ConstArray< C >
GetPointer(
const C& c ) {
return ConstArray< C >::FromPointer( &c , 1 ); }
80 template<
class C > Array< C >
GetPointer( std::vector< C >& v ){
return Array< C >::FromPointer( &v[0] , v.size() ); }
81 template<
class C > ConstArray< C >
GetPointer(
const std::vector< C >& v ){
return ConstArray< C >::FromPointer( &v[0] , v.size() ); }
84 #define Pointer( ... ) __VA_ARGS__*
85 #define ConstPointer( ... ) const __VA_ARGS__*
86 #define NullPointer( ... ) NULL
88 #define FreePointer( ... ) { if( __VA_ARGS__ ) free( __VA_ARGS__ ) , __VA_ARGS__ = NULL; }
89 #define AlignedFreePointer( ... ) { if( __VA_ARGS__ ) aligned_free( __VA_ARGS__ ) , __VA_ARGS__ = NULL; }
90 #define DeletePointer( ... ) { if( __VA_ARGS__ ) delete[] __VA_ARGS__ , __VA_ARGS__ = NULL; }
102 template<
class C >
const C*
GetPointer(
const C& c ){
return &c; }
103 template<
class C > C*
GetPointer( std::vector< C >& v ){
return &v[0]; }
104 template<
class C >
const C*
GetPointer(
const std::vector< C >& v ){
return &v[0]; }
C * AlignedAllocPointer(size_t size, size_t alignment, const char *name=NULL)
#define DeletePointer(...)
void * aligned_malloc(size_t size, size_t align)
C * NewPointer(size_t size, const char *name=NULL)
C * ReAllocPointer(C *c, size_t size, const char *name=NULL)
#define AlignedFreePointer(...)
C * AllocPointer(size_t size, const char *name=NULL)
void aligned_free(void *mem)