hctFilterMemoryTracker.inl
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. inline void* hctFilterMemoryTracker::allocate(int nbytes, HK_MEMORY_CLASS cl)
  9. {
  10. unsigned char* val = hkAllocate<unsigned char>(nbytes, cl);
  11. MemoryAlloc* ma = hkAllocateChunk<MemoryAlloc>(1, HK_MEMORY_CLASS_EXPORT);
  12. ma->m_mem = val;
  13. ma->m_next = m_allocs;
  14. m_allocs = ma;
  15. return val;
  16. }
  17. inline void* hctFilterMemoryTracker::allocateChunk(int nbytes, HK_MEMORY_CLASS cl)
  18. {
  19. unsigned char* val = hkAllocateChunk<unsigned char>(nbytes, cl);
  20. MemoryChunk* ca = hkAllocateChunk<MemoryChunk>(1, HK_MEMORY_CLASS_EXPORT);
  21. ca->m_mem = val;
  22. ca->m_memSize = nbytes;
  23. ca->m_memClass = cl;
  24. ca->m_next = m_chunkAllocs;
  25. m_chunkAllocs = ca;
  26. return val;
  27. }
  28. inline void* hctFilterMemoryTracker::alignedAllocate(int alignment, int nbytes, HK_MEMORY_CLASS cl)
  29. {
  30. unsigned char* val = hkAlignedAllocate<unsigned char>(alignment, nbytes, cl);
  31. MemoryAlloc* ma = hkAllocateChunk<MemoryAlloc>(1, HK_MEMORY_CLASS_EXPORT);
  32. ma->m_mem = val;
  33. ma->m_next = m_alignedAllocs;
  34. m_alignedAllocs = ma;
  35. return val;
  36. }
  37. inline void hctFilterMemoryTracker::deallocate(void* p)
  38. {
  39. // stop tracking it
  40. MemoryAlloc* prev = HK_NULL; 
  41. MemoryAlloc* ma = m_allocs;
  42. while (ma)
  43. {
  44. if (ma->m_mem == p)
  45. {
  46. hkDeallocate(ma->m_mem);
  47. if (prev) prev->m_next = ma->m_next;
  48. if (m_allocs == ma) m_allocs = ma->m_next;
  49. hkDeallocateChunk(ma, 1, HK_MEMORY_CLASS_EXPORT);
  50. return;
  51. }
  52. prev = ma;
  53. ma = ma->m_next;
  54. }
  55. }
  56. inline void hctFilterMemoryTracker::alignedDeallocate(void* p)
  57. {
  58. // stop tracking it
  59. MemoryAlloc* prev = HK_NULL; 
  60. MemoryAlloc* ma = m_alignedAllocs;
  61. while (ma)
  62. {
  63. if (ma->m_mem == p)
  64. {
  65. hkAlignedDeallocate(ma->m_mem);
  66. if (prev) prev->m_next = ma->m_next;
  67. if (m_alignedAllocs == ma) m_alignedAllocs = ma->m_next;
  68. hkDeallocateChunk(ma, 1, HK_MEMORY_CLASS_EXPORT);
  69. return;
  70. }
  71. prev = ma;
  72. ma = ma->m_next;
  73. }
  74. }
  75. inline void hctFilterMemoryTracker::deallocateChunk(void* p, int nbytes, HK_MEMORY_CLASS cl)
  76. {
  77. // stop tracking it
  78. MemoryChunk* prev = HK_NULL; 
  79. MemoryChunk* ma = m_chunkAllocs;
  80. while (ma)
  81. {
  82. if (ma->m_mem == p)
  83. {
  84. hkDeallocateChunk(ma->m_mem, ma->m_memSize, ma->m_memClass);
  85. if (prev) prev->m_next = ma->m_next;
  86. if (m_chunkAllocs == ma) m_chunkAllocs = ma->m_next;
  87. hkDeallocateChunk(ma, 1, HK_MEMORY_CLASS_EXPORT);
  88. return;
  89. }
  90. prev = ma;
  91. ma = ma->m_next;
  92. }
  93. }
  94. /*
  95. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  96. * Confidential Information of Havok.  (C) Copyright 1999-2009
  97. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  98. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  99. * rights, and intellectual property rights in the Havok software remain in
  100. * Havok and/or its suppliers.
  101. * Use of this software for evaluation purposes is subject to and indicates
  102. * acceptance of the End User licence Agreement for this product. A copy of
  103. * the license is included with this software and is also available at www.havok.com/tryhavok.
  104. */