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();
     }
 }
Exemplo n.º 3
0
        /// <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);
                }
            }
        }