Core/MemoryHelper: Add portable stack allocation

Former-commit-id: 50b96029c53d1784f028148f1ec15ae2cf98d036 [formerly eb3398905190df3d0dc77c8a3b54bb455059e39b] [formerly bfac4638e043161208ee7cf4735a788b1427f73e [formerly 1ee0a59ab5aa407c995afd287a9aaa4307075754]]
Former-commit-id: 521c4248c638e5141534cd1d223d8f563693b821 [formerly 203f6191b3b24ccb2e04d330372973dadfb81e1d]
Former-commit-id: 140a5c705819055b4d27f43156b079d6142049a5
This commit is contained in:
Lynix
2016-09-15 00:46:59 +02:00
parent 357128f0b6
commit 8e009a1d66
2 changed files with 81 additions and 0 deletions

View File

@@ -7,6 +7,27 @@
#ifndef NAZARA_MEMORYHELPER_HPP
#define NAZARA_MEMORYHELPER_HPP
#if defined(NAZARA_COMPILER_MSVC)
#include <malloc.h>
#define NAZARA_ALLOCA(size) _alloca(size)
#define NAZARA_ALLOCA_SUPPORT
#elif defined(NAZARA_COMPILER_CLANG) || defined(NAZARA_COMPILER_GCC) || defined(NAZARA_COMPILER_INTEL)
#include <alloca.h>
#define NAZARA_ALLOCA(size) alloca(size)
#define NAZARA_ALLOCA_SUPPORT
#endif
#ifdef NAZARA_ALLOCA_SUPPORT
#define NazaraStackAllocation(size) Nz::StackAllocation(NAZARA_ALLOCA(size))
#else
#define NazaraStackAllocation(size) Nz::StackAllocation(Nz::OperatorNew(size))
#endif
#include <cstddef>
namespace Nz
@@ -16,6 +37,20 @@ namespace Nz
template<typename T, typename... Args>
T* PlacementNew(T* ptr, Args&&... args);
class StackAllocation
{
public:
explicit StackAllocation(void* stackMemory);
~StackAllocation();
void* GetPtr();
operator void*();
private:
void* m_ptr;
};
}
#include <Nazara/Core/MemoryHelper.inl>