public void RemoveTrailingLine(GeneratorDirection fillDirection) { if (fillDirection == GeneratorDirection.Forward) { var removed = _lines.RemoveFromFront(); //Move Start forward because we are removing a line from the start Start += removed.Extent; } else { _lines.RemoveFromBack(); } }
public void RemoveTrailingLine(FillDirection fillDirection) { if (fillDirection == FillDirection.Forward) { //Note: the Deque implementation used (https://github.com/StephenCleary/Deque/blob/master/src/Nito.Collections.Deque/Deque.cs) //doesn't appear to actually release the reference to the item on calling the RemoveFrom_() methods. //This isn't really a problem here, but precludes its use for storing, eg, views. var removed = _lines.RemoveFromFront(); //Move Start forward because we are removing a line from the start Start += removed.Extent; } else { _lines.RemoveFromBack(); } }
/// <summary> /// Remove all views not in the target range from the buffer. /// </summary> private void UnbufferViews(RecyclerView.Recycler recycler) { TrimEmpty(); UnbufferTrailing(); UnbufferLeading(); TrimEmpty(); //Empty items may have been exposed by unbuffering CheckValidSteadyState(); void UnbufferTrailing() { if (TrailingBufferTargetSize == 0) { while (_trailingBuffer.Count > 0) { var record = _trailingBuffer.RemoveFromBack(); CheckValidState(); SendToIntermediateCache(recycler, record); } return; } while (TrailingBufferStart < TrailingBufferTargetStart) { if (_trailingBuffer.Count == 0) { return; } var record = _trailingBuffer.RemoveFromFront(); TrimEmpty(); CheckValidState(); SendToIntermediateCache(recycler, record); } while (TrailingBufferEnd > TrailingBufferTargetEnd) { if (_trailingBuffer.Count == 0) { return; } var record = _trailingBuffer.RemoveFromBack(); TrimEmpty(); CheckValidState(); SendToIntermediateCache(recycler, record); } } void UnbufferLeading() { if (LeadingBufferTargetSize == 0) { while (_leadingBuffer.Count > 0) { var record = _leadingBuffer.RemoveFromBack(); CheckValidState(); SendToIntermediateCache(recycler, record); } return; } while (LeadingBufferStart < LeadingBufferTargetStart) { if (_leadingBuffer.Count == 0) { return; } var record = _leadingBuffer.RemoveFromFront(); TrimEmpty(); CheckValidState(); CheckValidSteadyState(); SendToIntermediateCache(recycler, record); } while (LeadingBufferEnd > LeadingBufferTargetEnd) { if (_leadingBuffer.Count == 0) { return; } var record = _leadingBuffer.RemoveFromBack(); TrimEmpty(); CheckValidState(); CheckValidSteadyState(); SendToIntermediateCache(recycler, record); } } }