BsMemStack.cpp 968 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "BsPrerequisitesUtil.h"
  2. #include "BsMemStack.h"
  3. namespace BansheeEngine
  4. {
  5. MemStackInternal<1024 * 1024>* MemStack::ThreadMemStack = nullptr;
  6. void MemStack::beginThread()
  7. {
  8. if(ThreadMemStack != nullptr)
  9. endThread();
  10. ThreadMemStack = bs_new<MemStackInternal<1024 * 1024>>();
  11. }
  12. void MemStack::endThread()
  13. {
  14. if(ThreadMemStack != nullptr)
  15. {
  16. bs_delete(ThreadMemStack);
  17. ThreadMemStack = nullptr;
  18. }
  19. }
  20. UINT8* MemStack::alloc(UINT32 numBytes)
  21. {
  22. assert(ThreadMemStack != nullptr && "Stack allocation failed. Did you call beginThread?");
  23. return ThreadMemStack->alloc(numBytes);
  24. }
  25. void MemStack::deallocLast(UINT8* data)
  26. {
  27. assert(ThreadMemStack != nullptr && "Stack deallocation failed. Did you call beginThread?");
  28. ThreadMemStack->dealloc(data);
  29. }
  30. void* bs_stack_alloc(UINT32 numBytes)
  31. {
  32. return (void*)MemStack::alloc(numBytes);
  33. }
  34. void bs_stack_free(void* data)
  35. {
  36. return MemStack::deallocLast((UINT8*)data);
  37. }
  38. }