Record ReuseEmptyRecord(int minimumLength, int maximumLength) { if (!_recordReuseEnabled) { return(null); } var walker = this.EmptyRecordIndex.GetWalker(); var range = new BTreeWalkerRange <EmptyRecordIndexKey>(); range.SetStartAt(new EmptyRecordIndexKey { S = minimumLength, A = 0 }); range.SetEndAt(new EmptyRecordIndexKey { S = maximumLength, A = Int64.MaxValue }); walker.SetRange(range); var entry = walker.Next(); while (entry != null && _reusedRecords.ContainsKey(entry.Pointer)) { entry = walker.Next(); } if (entry != null) { _reusedRecords[entry.Pointer] = entry.Key; return(GetRecord(entry.Pointer)); } return(null); }
internal override CollectionEnumerator <TObj, ValueWithAddressIndexKey <TAttribute> > BuildEnumerator(bool descending) { var startKey = new ValueWithAddressIndexKey <TAttribute> { V = this.StartAt }; var endKey = new ValueWithAddressIndexKey <TAttribute> { V = this.EndAt }; BTreeWalkerRange <ValueWithAddressIndexKey <TAttribute> > range; if (!descending) { range = new BTreeWalkerRange <ValueWithAddressIndexKey <TAttribute> >(startKey, endKey); range.IncludeStartAt = this.IncludeStartAt; range.IncludeEndAt = this.IncludeEndAt; } else { //start and end are reversed range = new BTreeWalkerRange <ValueWithAddressIndexKey <TAttribute> >(endKey, startKey); range.IncludeStartAt = this.IncludeEndAt; range.IncludeEndAt = this.IncludeStartAt; } return(this.IndexedValue.BuildEnumerator(range, descending)); }
public void Ignores_All_Non_Included() { var rootNode = _mockDataProvider.GetRootNode(_degree); rootNode.EntryList.Add(new Entry <int> { Key = 1, Pointer = 1 }); rootNode.EntryList.Add(new Entry <int> { Key = 1, Pointer = 2 }); rootNode.EntryList.Add(new Entry <int> { Key = 2, Pointer = 3 }); rootNode.EntryList.Add(new Entry <int> { Key = 3, Pointer = 4 }); rootNode.EntryList.Add(new Entry <int> { Key = 3, Pointer = 5 }); rootNode.EntryList.Add(new Entry <int> { Key = 4, Pointer = 6 }); var walkedPointers = new List <Int64>(); var range = new BTreeWalkerRange <int>(1, 4); range.IncludeStartAt = false; range.IncludeEndAt = false; _walker.SetRange(range); var result = _walker.Next(); while (result != null) { walkedPointers.Add(result.Pointer); result = _walker.Next(); } Assert.AreEqual(walkedPointers, new List <int> { 3, 4, 5 }); }
internal override CollectionEnumerator <TObj, ValueWithAddressIndexKey <TAttribute> > BuildEnumerator(bool descending) { var startKey = new ValueWithAddressIndexKey <TAttribute> { V = (TAttribute)this.Value }; var range = new BTreeWalkerRange <ValueWithAddressIndexKey <TAttribute> >(); if (!descending) { range.SetStartAt(startKey); range.IncludeStartAt = this.OrEqual; } else { range.SetEndAt(startKey); range.IncludeEndAt = this.OrEqual; } return(this.IndexedValue.BuildEnumerator(range, descending)); }
Record ReuseRecycledRecord(int minimumLength) { return(UsingEmptyRecordIndex(() => { var walker = this.EmptyRecordIndex.GetWalker(); var range = new BTreeWalkerRange <EmptyRecordIndexKey>(); range.SetStartAt(new EmptyRecordIndexKey { S = minimumLength, A = 0 }); walker.SetRange(range); var entry = walker.Next(); if (entry != null) { this.EmptyRecordIndex.UnRegister(entry.Key); return GetRecord(entry.Pointer); } return null; })); }
public void Walks_Items_Above() { BuildTestTree(); var walkedKeys = new List <int>(); var range = new BTreeWalkerRange <int>(); range.SetStartAt(3); range.IncludeStartAt = false; _walker.SetRange(range); var entry = _walker.Next(); while (entry != null) { walkedKeys.Add(entry.Key); entry = _walker.Next(); } var expected = Enumerable.Range(4, 14); Assert.AreEqual(expected, walkedKeys); }
public void SetRange(BTreeWalkerRange <TKey> range) { this.Range = range; }
internal void SetRange(BTreeWalkerRange <TKey> range) { this.Range = range; }