CmMemStack.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "CmPrerequisitesUtil.h"
  2. #include "CmMemStack.h"
  3. namespace CamelotFramework
  4. {
  5. MemStackInternal<1024 * 1024> MemStack::mStacks[256];
  6. #if CM_DEBUG_MODE
  7. CM_THREAD_ID_TYPE MemStack::mThreadIds[256];
  8. #endif
  9. void MemStack::setupHeap(UINT8 heapId)
  10. {
  11. assert(heapId < 256);
  12. mStacks[heapId] = MemStackInternal<1024 * 1024>();
  13. #if CM_DEBUG_MODE
  14. mThreadIds[heapId] = CM_THREAD_CURRENT_ID;
  15. #endif
  16. }
  17. UINT8* MemStack::alloc(UINT32 numBytes, UINT32 heapId)
  18. {
  19. #if CM_DEBUG_MODE
  20. assert(mThreadIds[heapId] == CM_THREAD_CURRENT_ID && "Accessing a heap from an invalid thread.");
  21. #endif
  22. return mStacks[heapId].alloc(numBytes);
  23. }
  24. void MemStack::deallocLast(UINT8* data, UINT32 heapId)
  25. {
  26. #if CM_DEBUG_MODE
  27. assert(mThreadIds[heapId] == CM_THREAD_CURRENT_ID && "Accessing a heap from an invalid thread.");
  28. #endif
  29. mStacks[heapId].dealloc(data);
  30. }
  31. UINT8* stackAlloc(UINT32 numBytes, UINT32 heapId)
  32. {
  33. return MemStack::alloc(numBytes, heapId);
  34. }
  35. void stackDeallocLast(void* data, UINT32 heapId)
  36. {
  37. return MemStack::deallocLast((UINT8*)data, heapId);
  38. }
  39. }