InProcessMemory.cpp 931 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "InProcessMemory.h"
  2. #include "LinearMath/btHashMap.h"
  3. struct InProcessMemoryInternalData
  4. {
  5. btHashMap<btHashInt, void*> m_memoryPointers;
  6. };
  7. InProcessMemory::InProcessMemory()
  8. {
  9. m_data = new InProcessMemoryInternalData;
  10. }
  11. InProcessMemory::~InProcessMemory()
  12. {
  13. for (int i=0;i<m_data->m_memoryPointers.size();i++)
  14. {
  15. void** ptrptr = m_data->m_memoryPointers.getAtIndex(i);
  16. if (ptrptr)
  17. {
  18. void* ptr = *ptrptr;
  19. free(ptr);
  20. }
  21. }
  22. delete m_data;
  23. }
  24. void* InProcessMemory::allocateSharedMemory(int key, int size, bool allowCreation)
  25. {
  26. void** ptrptr = m_data->m_memoryPointers[key];
  27. if (ptrptr)
  28. {
  29. return *ptrptr;
  30. }
  31. void* ptr = malloc(size);
  32. m_data->m_memoryPointers.insert(key,ptr);
  33. return ptr;
  34. }
  35. void InProcessMemory::releaseSharedMemory(int /*key*/, int /*size*/)
  36. {
  37. //we don't release the memory here, but in the destructor instead,
  38. //so multiple users could 'share' the memory given some key
  39. }