public override void VisitRange(BTreeVisitor <TKey> visitor) { int nextResult = visitor(_records[0].Key, null); int idx = 0; while (idx < _records.Length) { int thisResult = nextResult; if (idx + 1 < _records.Length) { nextResult = visitor(_records[idx + 1].Key, null); } else { nextResult = 1; } if (thisResult > 0) { // This record's key is too big, so no chance further records // will match. return; } else if (nextResult >= 0) { // Next record's key isn't too small, so worth looking at children BTreeKeyedNode <TKey> child = ((BTree <TKey>)Tree).GetKeyedNode(_records[idx].ChildId); child.VisitRange(visitor); } idx++; } }
public override byte[] FindKey(TKey key) { int nextResult = _records[0].Key.CompareTo(key); int idx = 0; while (idx < _records.Length) { int thisResult = nextResult; if (idx + 1 < _records.Length) { nextResult = _records[idx + 1].Key.CompareTo(key); } else { nextResult = 1; } if (thisResult > 0) { // This record's key is too big, so no chance further records // will match. return(null); } else if (nextResult > 0) { // Next record's key is too big, so worth looking at children BTreeKeyedNode <TKey> child = ((BTree <TKey>)Tree).GetKeyedNode(_records[idx].ChildId); return(child.FindKey(key)); } idx++; } return(null); }