Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Range.cs
Go to the documentation of this file.
3
4namespace System;
5
6public readonly struct Range : IEquatable<Range>
7{
8 public Index Start { get; }
9
10 public Index End { get; }
11
12 public static Range All => Index.Start..Index.End;
13
14 public Range(Index start, Index end)
15 {
16 Start = start;
17 End = end;
18 }
19
20 public override bool Equals([NotNullWhen(true)] object? value)
21 {
22 if (value is Range { Start: var start } range && start.Equals(Start))
23 {
24 return range.End.Equals(End);
25 }
26 return false;
27 }
28
29 public bool Equals(Range other)
30 {
31 if (other.Start.Equals(Start))
32 {
33 return other.End.Equals(End);
34 }
35 return false;
36 }
37
38 public override int GetHashCode()
39 {
40 return HashCode.Combine(Start.GetHashCode(), End.GetHashCode());
41 }
42
43 public override string ToString()
44 {
45 Span<char> span = stackalloc char[24];
46 int num = 0;
47 if (Start.IsFromEnd)
48 {
49 span[0] = '^';
50 num = 1;
51 }
52 bool flag = ((uint)Start.Value).TryFormat(span.Slice(num), out var charsWritten);
53 num += charsWritten;
54 span[num++] = '.';
55 span[num++] = '.';
56 if (End.IsFromEnd)
57 {
58 span[num++] = '^';
59 }
60 flag = ((uint)End.Value).TryFormat(span.Slice(num), out charsWritten);
61 return new string(span[..(num + charsWritten)]);
62 }
63
64 public static Range StartAt(Index start)
65 {
66 return start..Index.End;
67 }
68
69 public static Range EndAt(Index end)
70 {
71 return Index.Start..end;
72 }
73
74 [MethodImpl(MethodImplOptions.AggressiveInlining)]
75 public (int Offset, int Length) GetOffsetAndLength(int length)
76 {
78 int num = ((!start.IsFromEnd) ? start.Value : (length - start.Value));
79 Index end = End;
80 int num2 = ((!end.IsFromEnd) ? end.Value : (length - end.Value));
81 if ((uint)num2 > (uint)length || (uint)num > (uint)num2)
82 {
84 }
85 return (Offset: num, Length: num2 - num);
86 }
87}
static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument)
override int GetHashCode()
Definition Index.cs:95
int Value
Definition Index.cs:15
override bool Equals([NotNullWhen(true)] object? value)
Definition Index.cs:81
static Index End
Definition Index.cs:12
bool IsFromEnd
Definition Index.cs:26
static Index Start
Definition Index.cs:10
Index End
Definition Range.cs:10
static Range All
Definition Range.cs:12
int Offset
Definition Range.cs:75
override string ToString()
Definition Range.cs:43
static Range StartAt(Index start)
Definition Range.cs:64
override bool Equals([NotNullWhen(true)] object? value)
Definition Range.cs:20
bool Equals(Range other)
Definition Range.cs:29
override int GetHashCode()
Definition Range.cs:38
Index Start
Definition Range.cs:8
int int Length GetOffsetAndLength(int length)
Definition Range.cs:75
Range(Index start, Index end)
Definition Range.cs:14
static Range EndAt(Index end)
Definition Range.cs:69
Span< T > Slice(int start)
Definition Span.cs:271