private void ProcessLastPlainSlice(Item item)
    {
        if (_lastPlainSlice != null && _lastPlainSlice.Value == item.Value)
        {
            _lastPlainSlice.SetLastIndex(item);

            return;
        }

        var beforeLastPlainSlice = _lastPlainSlice;

        _lastPlainSlice = new PlainSlice(item);
        ProcessBeforeLastPlainSlice(beforeLastPlainSlice);
    }
    private void ProcessBeforeLastPlainSlice(PlainSlice beforeLastPlainSlice)
    {
        var old = _beforeLastPlainSlice;

        _beforeLastPlainSlice = beforeLastPlainSlice;
        if (old == null)
        {
            return;
        }

        var size = old.Count() + _beforeLastPlainSlice.Count();

        SetMaxSize(size);
    }
 public BiSlice(PlainSlice previousPlainSlice)
 {
     _previousPlainSlice = previousPlainSlice;
 }