Rhino.UintMap.EnsureIndex C# (CSharp) Method

EnsureIndex() private method

private EnsureIndex ( int key, bool intType ) : int
key int
intType bool
return int
		private int EnsureIndex(int key, bool intType)
		{
			int index = -1;
			int firstDeleted = -1;
			int[] keys = this.keys;
			if (keys != null)
			{
				int fraction = key * A;
				index = (int)(((uint)fraction) >> (32 - power));
				int entry = keys[index];
				if (entry == key)
				{
					return index;
				}
				if (entry != EMPTY)
				{
					if (entry == DELETED)
					{
						firstDeleted = index;
					}
					// Search in table after first failed attempt
					int mask = (1 << power) - 1;
					int step = TableLookupStep(fraction, mask, power);
					int n = 0;
					do
					{
						index = (index + step) & mask;
						entry = keys[index];
						if (entry == key)
						{
							return index;
						}
						if (entry == DELETED && firstDeleted < 0)
						{
							firstDeleted = index;
						}
					}
					while (entry != EMPTY);
				}
			}
			// Inserting of new key
			if (check && keys != null && keys[index] != EMPTY)
			{
				Kit.CodeBug();
			}
			if (firstDeleted >= 0)
			{
				index = firstDeleted;
			}
			else
			{
				// Need to consume empty entry: check occupation level
				if (keys == null || occupiedCount * 4 >= (1 << power) * 3)
				{
					// Too litle unused entries: rehash
					RehashTable(intType);
					return InsertNewKey(key);
				}
				++occupiedCount;
			}
			keys[index] = key;
			++keyCount;
			return index;
		}