BsMemStack.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #include "BsPrerequisitesUtil.h"
  5. #include "BsMemStack.h"
  6. namespace BansheeEngine
  7. {
  8. MemStackInternal<1024 * 1024>* MemStack::ThreadMemStack = nullptr;
  9. void MemStack::beginThread()
  10. {
  11. if(ThreadMemStack != nullptr)
  12. endThread();
  13. ThreadMemStack = bs_new<MemStackInternal<1024 * 1024>>();
  14. }
  15. void MemStack::endThread()
  16. {
  17. if(ThreadMemStack != nullptr)
  18. {
  19. bs_delete(ThreadMemStack);
  20. ThreadMemStack = nullptr;
  21. }
  22. }
  23. UINT8* MemStack::alloc(UINT32 numBytes)
  24. {
  25. assert(ThreadMemStack != nullptr && "Stack allocation failed. Did you call beginThread?");
  26. return ThreadMemStack->alloc(numBytes);
  27. }
  28. void MemStack::deallocLast(UINT8* data)
  29. {
  30. assert(ThreadMemStack != nullptr && "Stack deallocation failed. Did you call beginThread?");
  31. ThreadMemStack->dealloc(data);
  32. }
  33. void* stackAlloc(UINT32 numBytes)
  34. {
  35. return (void*)MemStack::alloc(numBytes);
  36. }
  37. void stackDeallocLast(void* data)
  38. {
  39. return MemStack::deallocLast((UINT8*)data);
  40. }
  41. }