private void Grow() { HashArray temp = this.hashArrays[this.hashArrays.Length - 1]; for (int i = this.hashArrays.Length - 1; i > 0; i--) { this.hashArrays[i] = this.hashArrays[i - 1]; } this.capacity *= 2; this.hashArrays[0] = new HashArray(this.capacity); for (int i = 1; i < this.hashArrays.Length; i++) { int[] sourceOffsetArray = this.hashArrays[i].offsets; int[] sourceCidsArray = this.hashArrays[i].cids; for (int k = 0; k < sourceOffsetArray.Length; k++) { for (int j = 0; j < i && sourceOffsetArray[k] != 0; j++) { int[] targetOffsetArray = this.hashArrays[j].offsets; int[] targetCidsArray = this.hashArrays[j].cids; int newIndex = IndexFor(StringHashCode(this.labelRepository, sourceOffsetArray[k]), targetOffsetArray.Length); if (targetOffsetArray[newIndex] == 0) { targetOffsetArray[newIndex] = sourceOffsetArray[k]; targetCidsArray[newIndex] = sourceCidsArray[k]; sourceOffsetArray[k] = 0; } } } } for (int i = 0; i < temp.offsets.Length; i++) { int offset = temp.offsets[i]; if (offset > 0) { int hash = StringHashCode(this.labelRepository, offset); AddLabelOffset(hash, temp.cids[i], offset); } } CollisionMap oldCollisionMap = this.collisionMap; this.collisionMap = new CollisionMap(oldCollisionMap.Capacity, this.labelRepository); this.threshold = (int)(this.capacity * this.loadFactor); using (var it = oldCollisionMap.GetEnumerator()) { while (it.MoveNext()) { var e = it.Current; AddLabelOffset(StringHashCode(this.labelRepository, e.offset), e.cid, e.offset); } } }
private bool AddLabelOffsetToHashArray(HashArray a, int hash, int ordinal, int knownOffset) { int index = CompactLabelToOrdinal.IndexFor(hash, a.offsets.Length); int offset = a.offsets[index]; if (offset == 0) { a.offsets[index] = knownOffset; a.cids[index] = ordinal; return(true); } return(false); }
private static bool AddLabelOffsetToHashArray(HashArray a, int hash, int ordinal, int knownOffset) // LUCENENET: CA1822: Mark members as static { int index = CompactLabelToOrdinal.IndexFor(hash, a.offsets.Length); int offset = a.offsets[index]; if (offset == 0) { a.offsets[index] = knownOffset; a.cids[index] = ordinal; return(true); } return(false); }
private bool AddLabel(HashArray a, FacetLabel label, int hash, int ordinal) { int index = CompactLabelToOrdinal.IndexFor(hash, a.offsets.Length); int offset = a.offsets[index]; if (offset == 0) { a.offsets[index] = this.labelRepository.Length; CategoryPathUtils.Serialize(label, labelRepository); a.cids[index] = ordinal; return(true); } return(false); }
private int GetOrdinal(HashArray a, FacetLabel label, int hash) { if (label == null) { return(LabelToOrdinal.INVALID_ORDINAL); } int index = IndexFor(hash, a.offsets.Length); int offset = a.offsets[index]; if (offset == 0) { return(LabelToOrdinal.INVALID_ORDINAL); } if (CategoryPathUtils.EqualsToSerialized(label, labelRepository, offset)) { return(a.cids[index]); } return(COLLISION); }
//Quadratic probing method inserts into the table public void quadraticHashInsert(int key, string value) { if (!checkOpenSpace())//If no open spaces available { Console.WriteLine("Table is full"); return; } int j; int index = key % maxSize; for (j = 0; j < maxSize && hash[index] != null && hash[index].getkey() != key; j++) { index = (index + j * j) % maxSize; } if (hash[index] == null) { hash[index] = new HashArray(key, value); return; } }
private int GetOrdinal(HashArray a, FacetLabel label, int hash) { if (label == null) { return LabelToOrdinal.INVALID_ORDINAL; } int index = IndexFor(hash, a.offsets.Length); int offset = a.offsets[index]; if (offset == 0) { return LabelToOrdinal.INVALID_ORDINAL; } if (CategoryPathUtils.EqualsToSerialized(label, labelRepository, offset)) { return a.cids[index]; } return COLLISION; }
private bool AddLabelOffsetToHashArray(HashArray a, int hash, int ordinal, int knownOffset) { int index = CompactLabelToOrdinal.IndexFor(hash, a.offsets.Length); int offset = a.offsets[index]; if (offset == 0) { a.offsets[index] = knownOffset; a.cids[index] = ordinal; return true; } return false; }
private bool AddLabel(HashArray a, FacetLabel label, int hash, int ordinal) { int index = CompactLabelToOrdinal.IndexFor(hash, a.offsets.Length); int offset = a.offsets[index]; if (offset == 0) { a.offsets[index] = this.labelRepository.Length; CategoryPathUtils.Serialize(label, labelRepository); a.cids[index] = ordinal; return true; } return false; }