diff options
| author | jackpoz <giacomopoz@gmail.com> | 2016-08-17 12:50:43 +0200 | 
|---|---|---|
| committer | jackpoz <giacomopoz@gmail.com> | 2016-08-17 22:00:35 +0200 | 
| commit | 1d7013e0e2758b1468a488dd17e3f5c5ce5f265d (patch) | |
| tree | 932d622c32574ae4545e415d4078928f1da42169 /dep/recastnavigation/Detour/Source/DetourNode.cpp | |
| parent | a893ecebf80bd85c4654249406b278e856a805f7 (diff) | |
Core/MMAPs: Update recast
Update recast to https://github.com/recastnavigation/recastnavigation/commit/64385e9ed0822427bca5814d03a3f4c4d7a6db9f
Diffstat (limited to 'dep/recastnavigation/Detour/Source/DetourNode.cpp')
| -rw-r--r-- | dep/recastnavigation/Detour/Source/DetourNode.cpp | 33 | 
1 files changed, 24 insertions, 9 deletions
| diff --git a/dep/recastnavigation/Detour/Source/DetourNode.cpp b/dep/recastnavigation/Detour/Source/DetourNode.cpp index 1d1897708f4..48abbba6b5b 100644 --- a/dep/recastnavigation/Detour/Source/DetourNode.cpp +++ b/dep/recastnavigation/Detour/Source/DetourNode.cpp @@ -22,17 +22,30 @@  #include "DetourCommon.h"  #include <string.h> +#ifdef DT_POLYREF64 +// From Thomas Wang, https://gist.github.com/badboy/6267743  inline unsigned int dtHashRef(dtPolyRef a)  { -    // Edited by TC -    a = (~a) + (a << 18); -    a = a ^ (a >> 31); -    a = a * 21; -    a = a ^ (a >> 11); -    a = a + (a << 6); -    a = a ^ (a >> 22); -    return (unsigned int)a; +	a = (~a) + (a << 18); // a = (a << 18) - a - 1; +	a = a ^ (a >> 31); +	a = a * 21; // a = (a + (a << 2)) + (a << 4); +	a = a ^ (a >> 11); +	a = a + (a << 6); +	a = a ^ (a >> 22); +	return (unsigned int)a;  } +#else +inline unsigned int dtHashRef(dtPolyRef a) +{ +	a += ~(a<<15); +	a ^=  (a>>10); +	a +=  (a<<3); +	a ^=  (a>>6); +	a += ~(a<<11); +	a ^=  (a>>16); +	return (unsigned int)a; +} +#endif  //////////////////////////////////////////////////////////////////////////////////////////  dtNodePool::dtNodePool(int maxNodes, int hashSize) : @@ -44,7 +57,9 @@ dtNodePool::dtNodePool(int maxNodes, int hashSize) :  	m_nodeCount(0)  {  	dtAssert(dtNextPow2(m_hashSize) == (unsigned int)m_hashSize); -	dtAssert(m_maxNodes > 0); +	// pidx is special as 0 means "none" and 1 is the first node. For that reason +	// we have 1 fewer nodes available than the number of values it can contain. +	dtAssert(m_maxNodes > 0 && m_maxNodes <= DT_NULL_IDX && m_maxNodes <= (1 << DT_NODE_PARENT_BITS) - 1);  	m_nodes = (dtNode*)dtAlloc(sizeof(dtNode)*m_maxNodes, DT_ALLOC_PERM);  	m_next = (dtNodeIndex*)dtAlloc(sizeof(dtNodeIndex)*m_maxNodes, DT_ALLOC_PERM); | 
