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();
}
}