private int[] GetLinearFilteredRecords(Range range) { if (_linearExpression == null) { int[] resultRecords = new int[range.Count]; RBTree <int> .RBTreeEnumerator iterator = _index.GetEnumerator(range.Min); for (int i = 0; i < range.Count && iterator.MoveNext(); i++) { resultRecords[i] = iterator.Current; } return(resultRecords); } else { List <int> matchingRecords = new List <int>(); RBTree <int> .RBTreeEnumerator iterator = _index.GetEnumerator(range.Min); for (int i = 0; i < range.Count && iterator.MoveNext(); i++) { if (AcceptRecord(iterator.Current)) { matchingRecords.Add(iterator.Current); } } return(matchingRecords.ToArray()); } }