hkTree.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_BASE_TREE_H
  9. #define HK_BASE_TREE_H
  10. // Dont doc this class, users won't use it directly.
  11. class hkTreeBase
  12. {
  13. public:
  14. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_TREE, hkTreeBase);
  15. struct Node;
  16. typedef Node* Iter;
  17. typedef void (HK_CALL *destructFunc)(void*);
  18. hkTreeBase(int nodesize);
  19. ~hkTreeBase();
  20. // insert/remove
  21. Iter append(Iter iter, const void* value, int size);
  22. Iter remove(Iter iter, destructFunc destroy);
  23. // values
  24. void setValue(Iter iter, const void* value, int size );
  25. const void* getValue(Iter i) const;
  26. int getDepth(Iter i) const;
  27. int getNumChildren(Iter i) const;
  28. // iterator
  29. Iter iterGetRoot() const;
  30. Iter iterNext(Iter i) const;
  31. Iter iterNextPreOrder(Iter i) const;
  32. Iter iterParent(Iter i) const;
  33. Iter iterChildren(Iter i) const;
  34. private:
  35. Iter m_firstRoot;
  36. Iter m_lastRoot;
  37. int m_nodeSize;
  38. };
  39. /// N-ary tree with homogeneous values.
  40. /// The values must be memcpy-able.
  41. template <typename T>
  42. class hkTree
  43. {
  44. public:
  45. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_TREE, hkTree<T>);
  46. typedef hkTreeBase::Iter Iter;
  47. typedef hkTreeBase::destructFunc destructFunc;
  48. static void HK_CALL defaultDestruct(void* p);
  49. /// Create an empty tree.
  50. /// If your values need special destruction, pass in a destruct function.
  51. inline hkTree(destructFunc destruct=defaultDestruct);
  52. /// Destroy a tree and each of its nodes.
  53. ~hkTree();
  54. // 
  55. // Insert/remove
  56. //
  57. /// Remove all values from the tree.
  58. inline void clear();
  59. /// Add a new node as the last child of iter.
  60. /// If iter is null, add it at root level.
  61. inline Iter append(Iter i, const T& t);
  62. /// Remove the subtree at iterator i. Iterator i is then invalid.
  63. /// For each node that is destroyed, destructFunc is called.
  64. /// Returns an iterator to the next element at the same level.
  65. inline Iter remove(Iter i);
  66. //
  67. // Value
  68.          //
  69. /// Set the value of a node.
  70. inline void setValue(Iter i, const T& t );
  71. /// Get the value at iter i.
  72. inline const T& getValue(Iter i) const;
  73. /// Get the depth at iter i. Root nodes have depth 0. Returns -1 if the tree is empty;
  74. inline int getDepth(Iter i) const;
  75. /// Return the number of children of node at i.
  76. inline int getNumChildren(Iter i) const;
  77. //
  78. // Iterators
  79. //
  80. /// Root iterator.
  81. inline Iter iterGetRoot() const;
  82. /// Next node in pre-order (children before siblings).
  83. inline Iter iterNextPreOrder(Iter i) const;
  84. /// Next sibling.
  85. inline Iter iterNext(Iter i) const;
  86. /// Parent.
  87. inline Iter iterParent(Iter i) const;
  88. /// First child.
  89. inline Iter iterChildren(Iter i) const;
  90. private:
  91. destructFunc m_destruct;
  92. hkTreeBase m_tree;
  93. };
  94. #include <Common/Base/Container/Tree/hkTree.inl>
  95. #endif //HK_BASE_TREE_H
  96. /*
  97. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  98. * Confidential Information of Havok.  (C) Copyright 1999-2009
  99. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  100. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  101. * rights, and intellectual property rights in the Havok software remain in
  102. * Havok and/or its suppliers.
  103. * Use of this software for evaluation purposes is subject to and indicates
  104. * acceptance of the End User licence Agreement for this product. A copy of
  105. * the license is included with this software and is also available at www.havok.com/tryhavok.
  106. */