public unsafe void AddProxyResult(ushort proxyId, Proxy proxy, int maxCount, SortKeyFunc sortKey)
{
float key = sortKey(proxy.UserData);
//Filter proxies on positive keys
if (key < 0)
return;
//Merge the new key into the sorted list.
//float32* p = std::lower_bound(m_querySortKeys,m_querySortKeys+m_queryResultCount,key);
fixed (float* querySortKeysPtr = _querySortKeys)
{
float* p = querySortKeysPtr;
while (*p < key && p < &querySortKeysPtr[_queryResultCount])
p++;
int i = (int)(p - &querySortKeysPtr[0]);
if (maxCount == _queryResultCount && i == _queryResultCount)
return;
if (maxCount == _queryResultCount)
_queryResultCount--;
//std::copy_backward
for (int j = _queryResultCount + 1; j > i; --j)
{
_querySortKeys[j] = _querySortKeys[j - 1];
_queryResults[j] = _queryResults[j - 1];
}
_querySortKeys[i] = key;
_queryResults[i] = proxyId;
_queryResultCount++;
}
}
#else