Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Index.cs
Go to the documentation of this file.
3
4namespace System;
5
6public readonly struct Index : IEquatable<Index>
7{
8 private readonly int _value;
9
10 public static Index Start => new Index(0);
11
12 public static Index End => new Index(-1);
13
14 public int Value
15 {
16 get
17 {
18 if (_value < 0)
19 {
20 return ~_value;
21 }
22 return _value;
23 }
24 }
25
26 public bool IsFromEnd => _value < 0;
27
28 [MethodImpl(MethodImplOptions.AggressiveInlining)]
29 public Index(int value, bool fromEnd = false)
30 {
31 if (value < 0)
32 {
34 }
35 if (fromEnd)
36 {
37 _value = ~value;
38 }
39 else
40 {
41 _value = value;
42 }
43 }
44
45 private Index(int value)
46 {
47 _value = value;
48 }
49
50 [MethodImpl(MethodImplOptions.AggressiveInlining)]
51 public static Index FromStart(int value)
52 {
53 if (value < 0)
54 {
56 }
57 return new Index(value);
58 }
59
60 [MethodImpl(MethodImplOptions.AggressiveInlining)]
61 public static Index FromEnd(int value)
62 {
63 if (value < 0)
64 {
66 }
67 return new Index(~value);
68 }
69
70 [MethodImpl(MethodImplOptions.AggressiveInlining)]
71 public int GetOffset(int length)
72 {
73 int num = _value;
74 if (IsFromEnd)
75 {
76 num += length + 1;
77 }
78 return num;
79 }
80
81 public override bool Equals([NotNullWhen(true)] object? value)
82 {
83 if (value is Index)
84 {
85 return _value == ((Index)value)._value;
86 }
87 return false;
88 }
89
90 public bool Equals(Index other)
91 {
92 return _value == other._value;
93 }
94
95 public override int GetHashCode()
96 {
97 return _value;
98 }
99
100 public static implicit operator Index(int value)
101 {
102 return FromStart(value);
103 }
104
105 public override string ToString()
106 {
107 if (IsFromEnd)
108 {
109 return ToStringFromEnd();
110 }
111 return ((uint)Value).ToString();
112 }
113
114 private string ToStringFromEnd()
115 {
116 Span<char> span = stackalloc char[11];
117 int charsWritten;
118 bool flag = ((uint)Value).TryFormat(span.Slice(1), out charsWritten);
119 span[0] = '^';
120 return new string(span.Slice(0, charsWritten + 1));
121 }
122}
static void ThrowValueArgumentOutOfRange_NeedNonNegNumException()
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
Index(int value, bool fromEnd=false)
Definition Index.cs:29
Index(int value)
Definition Index.cs:45
int GetOffset(int length)
Definition Index.cs:71
override string ToString()
Definition Index.cs:105
bool Equals(Index other)
Definition Index.cs:90
static Index FromEnd(int value)
Definition Index.cs:61
bool IsFromEnd
Definition Index.cs:26
static Index Start
Definition Index.cs:10
static Index FromStart(int value)
Definition Index.cs:51
string ToStringFromEnd()
Definition Index.cs:114
readonly int _value
Definition Index.cs:8
Span< T > Slice(int start)
Definition Span.cs:271