Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Slice() [8/9]

ReadOnlySequence< T > System.Buffers.ReadOnlySequence< T >.Slice ( SequencePosition start,
long length )
inline

Definition at line 298 of file ReadOnlySequence.cs.

299 {
300 uint index = (uint)GetIndex(_startInteger);
301 object startObject = _startObject;
302 uint index2 = (uint)GetIndex(_endInteger);
303 object endObject = _endObject;
304 uint num = (uint)start.GetInteger();
305 object obj = start.GetObject();
306 if (obj == null)
307 {
308 num = index;
310 }
311 if (startObject == endObject)
312 {
313 if (!InRange(num, index, index2))
314 {
316 }
317 if (length < 0)
318 {
320 }
321 if (index2 - num < length)
322 {
324 }
325 }
326 else
327 {
328 ReadOnlySequenceSegment<T> readOnlySequenceSegment = (ReadOnlySequenceSegment<T>)obj;
329 ulong num2 = (ulong)(readOnlySequenceSegment.RunningIndex + num);
330 ulong start2 = (ulong)(((ReadOnlySequenceSegment<T>)startObject).RunningIndex + index);
331 ulong num3 = (ulong)(((ReadOnlySequenceSegment<T>)endObject).RunningIndex + index2);
332 if (!InRange(num2, start2, num3))
333 {
335 }
336 if (length < 0)
337 {
339 }
340 if ((ulong)((long)num2 + length) > num3)
341 {
343 }
344 int num4 = readOnlySequenceSegment.Memory.Length - (int)num;
345 if (num4 < length)
346 {
347 if (num4 < 0)
348 {
350 }
351 SequencePosition end = SeekMultiSegment(readOnlySequenceSegment.Next, endObject, (int)index2, length - num4, System.ExceptionArgument.length);
352 return SliceImpl(in start, in end);
353 }
354 }
355 SequencePosition start3 = new SequencePosition(obj, (int)num);
356 SequencePosition end2 = new SequencePosition(obj, (int)num + (int)length);
357 return SliceImpl(in start3, in end2);
358 }
static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument)
static void ThrowArgumentOutOfRangeException_PositionOutOfRange()
static void ThrowStartOrEndArgumentValidationException(long start)
static SequencePosition SeekMultiSegment(ReadOnlySequenceSegment< T > currentSegment, object endObject, int endIndex, long offset, System.ExceptionArgument argument)
ReadOnlySequence< T > SliceImpl(in SequencePosition start, in SequencePosition end)
static bool InRange(uint value, uint start, uint end)
static int GetIndex(int Integer)

References System.Buffers.ReadOnlySequence< T >._endInteger, System.Buffers.ReadOnlySequence< T >._endObject, System.Buffers.ReadOnlySequence< T >._startInteger, System.Buffers.ReadOnlySequence< T >._startObject, System.Buffers.ReadOnlySequence< T >.GetIndex(), System.index, System.index2, System.Buffers.ReadOnlySequence< T >.InRange(), System.L, System.length, System.Buffers.ReadOnlySequenceSegment< T >.Next, System.obj, System.Buffers.ReadOnlySequenceSegment< T >.RunningIndex, System.Buffers.ReadOnlySequence< T >.SeekMultiSegment(), System.Buffers.ReadOnlySequence< T >.SliceImpl(), System.start, System.ThrowHelper.ThrowArgumentOutOfRangeException(), System.ThrowHelper.ThrowArgumentOutOfRangeException_PositionOutOfRange(), and System.ThrowHelper.ThrowStartOrEndArgumentValidationException().