internal bool TryGetIndex(ref Int2 cellIndex, out int index, out int sortingHash) { sortingHash = cellIndex.GetSortingHash(); int minIndex = 0; //inclusive int maxIndex = count; //exclusive index = 0; while (maxIndex - minIndex > 0) //If the testing interval has a length of zero, we've done as much as we can. { index = (maxIndex + minIndex) / 2; if (cells.Elements[index].sortingHash > sortingHash) { maxIndex = index; } else if (cells.Elements[index].sortingHash < sortingHash) { minIndex = ++index; } else { //Found an equal sorting hash! //The hash can collide, and we cannot add an entry to //an incorrect index. It would break the 'cell responsibility' //used by the cell update process to avoid duplicate overlaps. //So, check if the index we found is ACTUALLY correct. if (cells.Elements[index].cellIndex.Y == cellIndex.Y && cells.Elements[index].cellIndex.Z == cellIndex.Z) { return(true); } //If it was not the correct index, let it continue searching. } } return(false); }
internal bool TryGetIndex(ref Int2 cellIndex, out int index, out int sortingHash) { sortingHash = cellIndex.GetSortingHash(); int minIndex = 0; //inclusive int maxIndex = count; //exclusive index = 0; while (maxIndex - minIndex > 0) //If the testing interval has a length of zero, we've done as much as we can. { index = (maxIndex + minIndex) / 2; if (cells.Elements[index].sortingHash > sortingHash) maxIndex = index; else if (cells.Elements[index].sortingHash < sortingHash) minIndex = ++index; else { //Found an equal sorting hash! //The hash can collide, and we cannot add an entry to //an incorrect index. It would break the 'cell responsibility' //used by the cell update process to avoid duplicate overlaps. //So, check if the index we found is ACTUALLY correct. if (cells.Elements[index].cellIndex.Y == cellIndex.Y && cells.Elements[index].cellIndex.Z == cellIndex.Z) { return true; } //If it was not the correct index, let it continue searching. } } return false; }