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

其他游戏

开发平台:

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_HKALGORITHM_H
  9. #define HKBASE_HKALGORITHM_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Common/Base/Algorithm/Sort/hkRadixSort.h>
  12. namespace hkAlgorithm
  13. {
  14. /// swap the elements
  15. template<typename T>
  16. HK_FORCE_INLINE void HK_CALL swap(T& x, T& y)
  17. {
  18. T t(x);
  19. x = y;
  20. y = t;
  21. }
  22. /// swap the 16 byte aligned elements
  23. template<typename T>
  24. HK_FORCE_INLINE void HK_CALL swap16(T& x, T& y)
  25. {
  26. HK_ALIGN16( T t ) = x;
  27. x = y;
  28. y = t;
  29. }
  30. /// function object that routes calls to operator<
  31. template<typename T>
  32. class less
  33. {
  34. public:
  35. HK_FORCE_INLINE hkBool operator() ( const T& a, const T& b )
  36. {
  37. return ( a < b );
  38. }
  39. };
  40. /// function object that routes calls to operator>
  41. template<typename T>
  42. class greater
  43. {
  44. public:
  45. HK_FORCE_INLINE hkBool operator() ( const T& a, const T& b )
  46. {
  47. return ( a > b );
  48. }
  49. };
  50. /// heap sort.  you supply the functor, see hkAlgorithm::less for an example functor.
  51. template<typename T, typename L>
  52. void HK_CALL heapSort(T *pArr, int iSize, L cmpLess);
  53. /// Heap sort for the elements of the specified array.
  54. ///
  55. /// param *pArr A pointer to the array to sort.
  56. /// param iSize The size of the array pointed to by *pArr.
  57. ///
  58. template<typename T>
  59. void HK_CALL heapSort(T *pArr, int iSize)
  60. {
  61. heapSort( pArr, iSize, less<T>() );
  62. }
  63. // used by heapSort
  64. template<typename T, typename L>
  65. void HK_CALL downHeap(T *pArr, int k, int n, L cmpLess);
  66. /// quick sort.  you supply the functor, see hkAlgorithm::less for an example functor.
  67. template<typename T, typename L>
  68. HK_FORCE_INLINE void HK_CALL quickSort(T *pArr, int iSize, L cmpLess);
  69. /// Quick sort for the elements of the specified array.
  70. ///
  71. /// param *pArr A pointer to the data to sort.
  72. /// param iSize The size of the array pointed to by *pArr.
  73. ///
  74. template<typename T>
  75. HK_FORCE_INLINE void HK_CALL quickSort(T *pArr, int iSize)
  76. {
  77. quickSort( pArr, iSize, less<T>() );
  78. }
  79. template< typename T, typename L >
  80. void HK_CALL quickSortRecursive(T *pArr, int d, int h, L cmpLess);
  81.         /// Quick sort using an explicit stack for efficiency reasons.
  82. template<typename T>
  83.     HK_FORCE_INLINE void HK_CALL explicitStackQuickSort(T *pArr, int iSize)
  84. {
  85.         explicitStackQuickSort( pArr, iSize, less<T>() );
  86. }
  87. /// Bubble sort.  you supply the functor, see hkAlgorithm::less for an example functor.
  88. template<typename T, typename L>
  89. HK_FORCE_INLINE void HK_CALL bubbleSort(T *pArr, int iSize, L cmpLess);
  90. /// Bubble sort for the elements of the specified array.
  91. /// THIS IS NOT AN EFFICIENT SORTING ALGORITHM
  92. /// Please use quickSort or heapSort in any runtime code
  93. /// Unlike quickSort or heapSort, this algorithm is STABLE,
  94. /// the relative order of equal elements is preserved
  95. ///
  96. /// param *pArr A pointer to the data to sort.
  97. /// param iSize The size of the array pointed to by *pArr.
  98. ///
  99. template<typename T>
  100. HK_FORCE_INLINE void HK_CALL bubbleSort(T *pArr, int iSize)
  101. {
  102. bubbleSort( pArr, iSize, less<T>() );
  103. }
  104. }
  105. #if defined(HK_PS2) //|| defined(HK_PLATFORM_PS3_PPU) || defined(HK_PLATFORM_PS3_SPU)
  106. #define hkSort hkAlgorithm::heapSort
  107. #else
  108.     #define hkSort hkAlgorithm::quickSort
  109.     //#define hkSort hkAlgorithm::explicitStackQuickSort
  110. #endif
  111. #include <Common/Base/Algorithm/Sort/hkSort.inl>
  112. #endif // HKBASE_HKALGORITHM_H
  113. /*
  114. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  115. * Confidential Information of Havok.  (C) Copyright 1999-2009
  116. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  117. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  118. * rights, and intellectual property rights in the Havok software remain in
  119. * Havok and/or its suppliers.
  120. * Use of this software for evaluation purposes is subject to and indicates
  121. * acceptance of the End User licence Agreement for this product. A copy of
  122. * the license is included with this software and is also available at www.havok.com/tryhavok.
  123. */