hkPackfileData.h
上传用户: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. #ifndef HK_PACKFILE_DATA_H
  9. #define HK_PACKFILE_DATA_H
  10. #include <Common/Serialize/Resource/hkResource.h>
  11. #include <Common/Base/Container/PointerMap/hkPointerMap.h>
  12. #include <Common/Base/Container/StringMap/hkStringMap.h>
  13. class hkTypeInfo;
  14. /// An interface to the data loaded by a packfile reader.
  15. class hkPackfileData : public hkResource
  16. {
  17. public:
  18. /// Create an empty object.
  19. hkPackfileData();
  20. // Inherited
  21. virtual ~hkPackfileData();
  22. // Inherited
  23. virtual void callDestructors();
  24. // Inherited
  25. virtual void getImportsExports( hkArray<Import>& impOut, hkArray<Export>& expOut ) const;
  26. // Inherited
  27. virtual const char* getName() const { return m_name; }
  28. /// Set the name of this data.
  29. void setName(const char* name);
  30. /// Prevent destructors from being called.
  31. /// Normally destructors are automatically called to free any runtime
  32. /// allocations (typically array resizes). You can prevent this behavior
  33. /// if you are cleaning up the data in some other way such as explicit
  34. /// destructor calls.
  35. void disableDestructors() { m_destructorsEnabled = false; }
  36. // Inherited
  37. virtual void* getContentsPointer(const char* typeName, const hkTypeInfoRegistry* finishRegistry) const;
  38. // Inherited
  39. virtual const char* getContentsTypeName() const;
  40. protected:
  41. struct Chunk
  42. {
  43. Chunk(void* p, int n, HK_MEMORY_CLASS c) : pointer(p), numBytes(n), memClass(c) { }
  44. void* pointer;
  45. int numBytes;
  46. HK_MEMORY_CLASS memClass;
  47. private:
  48. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SERIALIZE, hkPackfileData::Chunk );
  49. };
  50. public:
  51. // Internal functions for use by packfile readers.
  52. // Add a normal allocation.
  53. void addAllocation(void* p) { m_memory.pushBack(p); }
  54. // Check if the packfile data is not empty.
  55. bool isDirty() const { return m_topLevelObject || m_memory.getSize() > 0 || m_chunks.getSize() > 0 || m_exports.getSize() > 0 || m_imports.getSize() > 0; }
  56. // Add a chunk allocation.
  57. void addChunk(void*p, int n, HK_MEMORY_CLASS c) { m_chunks.pushBack( Chunk(p,n,c) ); }
  58. // Track object 'o' for cleanup in callDestructors().
  59. void trackObject(void* o, const char* n) { m_trackedObjects.insert(o, n); }
  60. // Make an object visible with a symbolic name.
  61. void addExport( const char* symbolName, void* object );
  62. // Remove an object from the export list.
  63. void removeExport( void* object );
  64. // Link a location to the symbolic name.
  65. void addImport( const char* symbolName, void** location );
  66. // Remove a location from the import list.
  67. void removeImport( void** location );
  68. // Set top level object.
  69. void setContentsWithName(void* topLevelObject, const char* typeName);
  70. // Return TRUE if objects are finished.
  71. hkBool32 finishedObjects() const;
  72. protected:
  73. typedef hkPointerMap<void*, const char*> TrackedObjectMap;
  74. typedef hkStringMap<const hkTypeInfo*> TrackedTypeMap;
  75. protected:
  76. void* m_topLevelObject;
  77. char* m_name;
  78. TrackedObjectMap m_trackedObjects;
  79. mutable TrackedTypeMap m_trackedTypes;
  80. hkBool32 m_destructorsEnabled;
  81. hkArray<void*> m_memory;
  82. hkArray<Chunk> m_chunks;
  83. hkArray<Export> m_exports;
  84. hkArray<Import> m_imports;
  85. friend class hkPackfileObjectUpdateTracker;
  86. };
  87. #endif // HK_PACKFILE_DATA_H
  88. /*
  89. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  90. * Confidential Information of Havok.  (C) Copyright 1999-2009
  91. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  92. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  93. * rights, and intellectual property rights in the Havok software remain in
  94. * Havok and/or its suppliers.
  95. * Use of this software for evaluation purposes is subject to and indicates
  96. * acceptance of the End User licence Agreement for this product. A copy of
  97. * the license is included with this software and is also available at www.havok.com/tryhavok.
  98. */