protected override void EndProcessing() { while (_lastItemsQueue.Count > 0) { PartitionObject obj = _lastItemsQueue.Dequeue(); LastItemMatchImpl(obj.Item); } }
protected override void ProcessRecord() { if (_curObjIndex < _firstNItems) { FirstItemMatchImpl(_inputObject); } else if (_lastNItems > 0) { if (_lastItemsQueue.Count == _lastNItems) { PartitionObject obj = _lastItemsQueue.Dequeue(); if (IsSelectedIndexMatch(obj.Index)) { SelectedIndexMatchImpl(obj.Item); } else { NonSelectedItemImpl(obj.Item); } } _lastItemsQueue.Enqueue(new PartitionObject(_curObjIndex, _inputObject)); } else { if (IsSelectedIndexMatch(_curObjIndex)) { SelectedIndexMatchImpl(_inputObject); } else { NonSelectedItemImpl(_inputObject); } } _curObjIndex++; }