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

◆ Slice() [5/9]

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

Definition at line 241 of file ReadOnlySequence.cs.

242 {
243 if (start < 0)
244 {
246 }
247 uint index = (uint)GetIndex(_startInteger);
248 object startObject = _startObject;
249 uint index2 = (uint)GetIndex(_endInteger);
250 object endObject = _endObject;
251 uint num = (uint)end.GetInteger();
252 object obj = end.GetObject();
253 if (obj == null)
254 {
256 num = index;
257 }
258 if (startObject == endObject)
259 {
260 if (!InRange(num, index, index2))
261 {
263 }
264 if (num - index < start)
265 {
267 }
268 }
269 else
270 {
271 ReadOnlySequenceSegment<T> readOnlySequenceSegment = (ReadOnlySequenceSegment<T>)startObject;
272 ulong num2 = (ulong)(readOnlySequenceSegment.RunningIndex + index);
273 ulong num3 = (ulong)(((ReadOnlySequenceSegment<T>)obj).RunningIndex + num);
274 if (!InRange(num3, num2, (ulong)(((ReadOnlySequenceSegment<T>)endObject).RunningIndex + index2)))
275 {
277 }
278 if ((ulong)((long)num2 + start) > num3)
279 {
281 }
282 int num4 = readOnlySequenceSegment.Memory.Length - (int)index;
283 if (num4 <= start)
284 {
285 if (num4 < 0)
286 {
288 }
289 SequencePosition start2 = SeekMultiSegment(readOnlySequenceSegment.Next, obj, (int)num, start - num4, System.ExceptionArgument.start);
290 return SliceImpl(in start2, in end);
291 }
292 }
293 SequencePosition start3 = new SequencePosition(startObject, (int)index + (int)start);
294 SequencePosition end2 = new SequencePosition(obj, (int)num);
295 return SliceImpl(in start3, in end2);
296 }
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.SequencePosition.GetInteger(), System.SequencePosition.GetObject(), System.index, System.index2, System.Buffers.ReadOnlySequence< T >.InRange(), System.L, 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().