Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
StringHandle.cs
Go to the documentation of this file.
2
4
5public readonly struct StringHandle : IEquatable<StringHandle>
6{
7 internal enum VirtualIndex
8 {
15 Dispose,
18 Color,
34 IList,
35 IList1,
40 KeyTime,
42 Matrix,
50 Plane,
51 Point,
55 Rect,
58 Size,
59 System,
68 Type,
69 Uri,
70 Vector2,
71 Vector3,
72 Vector4,
80 Count
81 }
82
83 private readonly uint _value;
84
85 internal uint RawValue => _value;
86
87 internal bool IsVirtual => (_value & 0x80000000u) != 0;
88
89 public bool IsNil => (_value & 0x9FFFFFFFu) == 0;
90
91 internal StringKind StringKind => (StringKind)(_value >> 29);
92
93 private StringHandle(uint value)
94 {
95 _value = value;
96 }
97
98 internal static StringHandle FromOffset(int heapOffset)
99 {
100 return new StringHandle(0u | (uint)heapOffset);
101 }
102
103 internal static StringHandle FromVirtualIndex(VirtualIndex virtualIndex)
104 {
105 return new StringHandle(0x80000000u | (uint)virtualIndex);
106 }
107
108 internal static StringHandle FromWriterVirtualIndex(int virtualIndex)
109 {
110 return new StringHandle(0x80000000u | (uint)virtualIndex);
111 }
112
114 {
115 return new StringHandle(0xA0000000u | _value);
116 }
117
119 {
120 return new StringHandle(0x20000000u | _value);
121 }
122
123 internal StringHandle SuffixRaw(int prefixByteLength)
124 {
125 return new StringHandle(0u | (_value + (uint)prefixByteLength));
126 }
127
128 public static implicit operator Handle(StringHandle handle)
129 {
130 return new Handle((byte)(((handle._value & 0x80000000u) >> 24) | 0x78u | ((handle._value & 0x60000000) >> 29)), (int)(handle._value & 0x1FFFFFFF));
131 }
132
133 public static explicit operator StringHandle(Handle handle)
134 {
135 if ((handle.VType & -132) != 120)
136 {
138 }
139 return new StringHandle((uint)(((handle.VType & 0x80) << 24) | ((handle.VType & 3) << 29) | handle.Offset));
140 }
141
142 internal int GetHeapOffset()
143 {
144 return (int)(_value & 0x1FFFFFFF);
145 }
146
148 {
149 return (VirtualIndex)((int)_value & 0x1FFFFFFF);
150 }
151
153 {
154 return (int)(_value & 0x1FFFFFFF);
155 }
156
157 public override bool Equals(object? obj)
158 {
159 if (obj is StringHandle)
160 {
161 return Equals((StringHandle)obj);
162 }
163 return false;
164 }
165
167 {
168 return _value == other._value;
169 }
170
171 public override int GetHashCode()
172 {
173 return (int)_value;
174 }
175
176 public static bool operator ==(StringHandle left, StringHandle right)
177 {
178 return left.Equals(right);
179 }
180
181 public static bool operator !=(StringHandle left, StringHandle right)
182 {
183 return !left.Equals(right);
184 }
185}
static void InvalidCast()
Definition Throw.cs:12
static bool operator==(StringHandle left, StringHandle right)
override bool Equals(object? obj)
static StringHandle FromVirtualIndex(VirtualIndex virtualIndex)
static StringHandle FromWriterVirtualIndex(int virtualIndex)
static bool operator!=(StringHandle left, StringHandle right)
static StringHandle FromOffset(int heapOffset)
StringHandle SuffixRaw(int prefixByteLength)