private object RemovePair(int proxyId1, int proxyId2)
{
Box2DXDebug.Assert(_pairCount > 0);
if (proxyId1 > proxyId2)
Common.Math.Swap<int>(ref proxyId1, ref proxyId2);
int hash = (int)(Hash((uint)proxyId1, (uint)proxyId2) & PairManager.TableMask);
//uint16* node = &m_hashTable[hash];
ushort node = _hashTable[hash];
bool ion = false;
int ni = 0;
while (node != PairManager.NullPair)
{
if (Equals(_pairs[node], proxyId1, proxyId2))
{
//uint16 index = *node;
//*node = m_pairs[*node].next;
ushort index = node;
node = _pairs[node].Next;
if (ion)
_pairs[ni].Next = node;
else
{
_hashTable[hash] = node;
}
Pair pair = _pairs[index];
object userData = pair.UserData;
// Scrub
pair.Next = _freePair;
pair.ProxyId1 = PairManager.NullProxy;
pair.ProxyId2 = PairManager.NullProxy;
pair.UserData = null;
pair.Status = 0;
_freePair = index;
--_pairCount;
return userData;
}
else
{
//node = &m_pairs[*node].next;
ni = node;
node = _pairs[ni].Next;
ion = true;
}
}
Box2DXDebug.Assert(false);
return null;
}