gtMemorySystem
export class

Класс содержащий статичные методы для работы с памятью.
Память выделенная этим классом выделяется в модуле gentle, и желательно чтобы вся память выделялась и освобождалась им.

Методы
gtMemorySystem::allocate
GT_API static void * allocate( u32 size, bool exceptions = false, bool zeroMemory = false );
Выделить память в количестве size байт.
exceptions - генерировать ОС-зависимые исключения.
zeroMemory - заполнять ли память нулями.
exceptions и zeroMemory - опции функции WinAPI. Для других ОС возможно придётся использовать стандартные memset и исключения.

gtMemorySystem::free
GT_API static bool free( void * ptr );
Освободить память выделенную с помощью gtMemorySystem::allocate

gtMemorySystem::reallocate
GT_API static void * reallocate( u32 size, void * ptr, bool exceptions = false, bool zeroMemory = false );
Выделить дополнительную память.

gtMemorySystem::set
GT_API static void set( void * data, void * value, u32 stride, u32 size );
Заполнить массив указанным значением (заполнение не побайтовое как у memset).
int arr[ 10 ];
int val = 666;
set( arr, &val, sizeof( int ), 10 );
				
Для короткой записи смотрите константу gtMemSet.


Макросы

gtMemAlloc
#define gtMemAlloc(size) gtMemorySystem::allocate((size))

gtMemAllocE
#define gtMemAllocE(size) gtMemorySystem::allocate((size),true)

gtMemFree
#define gtMemFree(ptr) gtMemorySystem::free((ptr));ptr=nullptr

gtMemReAlloc
#define gtMemReAlloc(ptr,size) gtMemorySystem::reallocate((size),(ptr))


Дополнительные типы и константа

struct gtMemSet_t{
	template<typename type>
	void operator()(type val,void*ptr,u32 size) const {
		gtMemorySystem::set(ptr,&val,sizeof(type),size);
	}
}const gtMemSet;