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

其他游戏

开发平台:

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 HKBASE_HKOBJECTARRAY_H
  9. #define HKBASE_HKOBJECTARRAY_H
  10. #include <Common/Base/System/Io/OStream/hkOStream.h>
  11. /// Array for objects with nontrivial constructors/destructors.
  12. /// Object lifetimes: Memory at elements [0, getSize()) are live objects.
  13. /// Memory at elements [getSize(),getCapacity()) is uninitialized.<p>
  14. ///
  15. /// For performance reasons, order may not be preserved when deleting elements.<p>
  16. ///
  17. /// Note: The following must be publicly accessible for each item in an object array:
  18. /// <ul><li>default constructor, copy constructor, assignment, destructor
  19. /// (either hand or compiler generated)</li>
  20. /// <li>placement new, needed to construct objects in place. (You may need to use 
  21. /// HK_DECLARE_CLASS_ALLOCATOR or HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR
  22. /// for structs, nested classes, etc)</li></ul>
  23. template <typename T>
  24. class hkObjectArray
  25. {
  26. public:
  27. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_ARRAY, hkObjectArray<T>);
  28. /// Creates a zero length array.
  29. HK_FORCE_INLINE hkObjectArray();
  30. /// Creates an array of size n elements, with their default constructor.
  31. HK_FORCE_INLINE hkObjectArray(int initialSize);
  32. /// Creates an array of n elements initialized to 'fill'.
  33. HK_FORCE_INLINE hkObjectArray(int initialSize, const T& fill);
  34. /// Copies the array a.
  35. HK_FORCE_INLINE hkObjectArray(const hkObjectArray& a);
  36. /// Copies the array a.
  37. hkObjectArray& operator= (const hkObjectArray& a);
  38. /// Deallocates array memory.
  39. HK_FORCE_INLINE ~hkObjectArray();
  40. /// Read/write access to the i'th element.
  41. HK_FORCE_INLINE T& operator[] (int i);
  42. /// Read only access to the i'th element.
  43. HK_FORCE_INLINE const T& operator[] (int i) const;
  44. /// Read/write access to the last element.
  45. HK_FORCE_INLINE T& back();
  46. /// Read only access to the last element.
  47. HK_FORCE_INLINE const T& back() const;
  48. /// Returns the size of the array.
  49. HK_FORCE_INLINE int getSize() const;
  50. /// Returns the capacity of the array.
  51. int getCapacity() const;
  52. /// Checks if the size is zero.
  53. HK_FORCE_INLINE hkBool isEmpty() const;
  54. /// Sets the size to zero.
  55. HK_FORCE_INLINE void clear();
  56. /// Sets the size to zero and deallocate storage.
  57. void clearAndDeallocate();
  58. /// Removes the element at the specified index.
  59. /// This is done by moving the last element into index i
  60. /// and resizing by -1. This is very fast, but note that
  61. /// the order of elements is changed.
  62. void removeAt(int index);
  63. /// Removes the element at the specified index, copying the elements down one slot.
  64. /// Slower than removeAt(), but the order is unchanged.
  65. void removeAtAndCopy(int index);
  66. /// Returns the index of the first occurrence of t, or -1 if not found.
  67. int indexOf(const T& t) const;
  68. /// Returns the index of the last occurrence of t, or -1 if not found.
  69. int lastIndexOf(const T& t) const;
  70. /// Removes the last element.
  71. HK_FORCE_INLINE void popBack();
  72. /// Adds an element to the end.
  73. HK_FORCE_INLINE void pushBack(const T& e);
  74. /// Sets the minimum capacity to n.
  75. HK_FORCE_INLINE void reserve(int minCapacity);
  76. /// Sets the size to n.
  77. HK_FORCE_INLINE void setSize(int n);
  78. /// Sets the size to n.
  79. /// If the array is expanded, new elements are initialized with 'fill'.
  80. void setSize(int n, const T& fill);
  81. /// Increments the size by 1 and returns a reference to the first element created.
  82. HK_FORCE_INLINE T& expandOne( );
  83. /// Increments the size by n and returns a reference to the first element created.
  84. HK_FORCE_INLINE T* expandBy( int n );
  85. /// Insert the array a at index i.
  86. //void insertAt(int i, const hkObjectArray<T>& a);
  87. /// Insert t at index i.
  88. //void insertAt(int i, const T& t);
  89. /// Swaps this array's internal storage with 'a'.
  90. void swap(hkObjectArray<T>& a);
  91. typedef T* iterator;
  92. typedef const T* const_iterator;
  93. HK_FORCE_INLINE iterator begin();
  94. HK_FORCE_INLINE iterator end();
  95. HK_FORCE_INLINE const_iterator begin() const;
  96. HK_FORCE_INLINE const_iterator end() const;
  97. protected:
  98. friend class hkStatisticsCollector;
  99. void construct(T* t, int n);
  100. void destruct(T* t, int n);
  101. void construct(T* t, int n, const T& tinit);
  102. hkArray<T> m_array;
  103. };
  104. template <typename T>
  105. hkOstream& operator<< (hkOstream& os, const hkObjectArray<T>& a);
  106. #include <Common/Base/Container/Array/hkObjectArray.inl>
  107. #endif // HKBASE_HKOBJECTARRAY_H
  108. /*
  109. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  110. * Confidential Information of Havok.  (C) Copyright 1999-2009
  111. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  112. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  113. * rights, and intellectual property rights in the Havok software remain in
  114. * Havok and/or its suppliers.
  115. * Use of this software for evaluation purposes is subject to and indicates
  116. * acceptance of the End User licence Agreement for this product. A copy of
  117. * the license is included with this software and is also available at www.havok.com/tryhavok.
  118. */