private Pair AddPair(int proxyId1, int proxyId2)
{
if (proxyId1 > proxyId2)
Common.Math.Swap<int>(ref proxyId1, ref proxyId2);
int hash = (int)(Hash((uint)proxyId1, (uint)proxyId2) & PairManager.TableMask);
Pair pair = Find(proxyId1, proxyId2, (uint)hash);
if (pair != null)
{
return pair;
}
Box2DXDebug.Assert(_pairCount < Settings.MaxPairs && _freePair != PairManager.NullPair);
ushort pairIndex = _freePair;
pair = _pairs[pairIndex];
_freePair = pair.Next;
pair.ProxyId1 = (ushort)proxyId1;
pair.ProxyId2 = (ushort)proxyId2;
pair.Status = 0;
pair.UserData = null;
pair.Next = _hashTable[hash];
_hashTable[hash] = pairIndex;
++_pairCount;
return pair;
}