Esempio n. 1
0
    public static ReadOnlySequence <T> Create <T>(IEnumerable <ReadOnlyMemory <T> > source)
    {
        if (source == null)
        {
            throw new ArgumentNullException(nameof(source));
        }
        if (!source.Any())
        {
            return(ReadOnlySequence <T> .Empty);
        }

        var totalLength    = source.Sum(s => s.Length);
        var lastMemory     = source.Last();
        var remainMemories = source.Reverse().Skip(1);

        CustomReadOnlySequenceSegment <T> firstSegment, lastSegment;

        firstSegment = new CustomReadOnlySequenceSegment <T>(lastMemory, null, totalLength - lastMemory.Length);
        lastSegment  = firstSegment;

        foreach (var currentElement in remainMemories)
        {
            firstSegment = new CustomReadOnlySequenceSegment <T>(currentElement, firstSegment, firstSegment.RunningIndex - currentElement.Length);
        }

        var sequence = new ReadOnlySequence <T>(firstSegment, 0, lastSegment, lastSegment.Memory.Length);

        return(sequence);
    }
Esempio n. 2
0
 public CustomReadOnlySequenceSegment(ReadOnlyMemory <T> memory, CustomReadOnlySequenceSegment <T>?next, long runningIndex)
 {
     this.Memory       = memory;
     this.Next         = next;
     this.RunningIndex = runningIndex;
 }