Ejemplo n.º 1
0
        public static SequencePosition?PositionOf(this ReadOnlySequence <byte> sequence, byte value)
        {
            SequencePosition position = sequence.Start;
            SequencePosition result   = position;

            while (sequence.TryGet(ref position, out ReadOnlyMemory <byte> memory))
            {
                var index = MemoryExtensions.IndexOf(memory.Span, value);
                if (index != -1)
                {
                    result = sequence.GetPosition(index, result);
                    return(result);
                }
                result = position;
            }
            return(null);
        }
Ejemplo n.º 2
0
        public static SequencePosition?PositionAt(this ReadOnlySequence <byte> sequence, long index)
        {
            SequencePosition position = sequence.Start;
            SequencePosition result   = position;

            while (sequence.TryGet(ref position, out ReadOnlyMemory <byte> memory))
            {
                var span = memory.Span;
                if (span.Length > index)
                {
                    result = sequence.GetPosition(index, result);
                    return(result);
                }
                index -= span.Length;
                result = position;
            }

            return(null);
        }
Ejemplo n.º 3
0
        public SequenceReader(ReadOnlySequence <T> sequence)
        {
            _usingSequence   = true;
            CurrentSpanIndex = 0;
            Consumed         = 0;
            _sequence        = sequence;
            _memory          = default;
            _currentPosition = sequence.Start;
            _length          = -1;

            var first = sequence.First.Span;

            _nextPosition = sequence.GetPosition(first.Length);
            CurrentSpan   = first;
            _moreData     = first.Length > 0;

            if (!_moreData && !sequence.IsSingleSegment)
            {
                _moreData = true;
                GetNextSpan();
            }
        }