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

◆ LastIndexOf()

static unsafe int System.Globalization.OrdinalCasing.LastIndexOf ( ReadOnlySpan< char > source,
ReadOnlySpan< char > value )
inlinestaticpackage

Definition at line 210 of file OrdinalCasing.cs.

211 {
212 fixed (char* ptr3 = &MemoryMarshal.GetReference(source))
213 {
214 fixed (char* ptr = &MemoryMarshal.GetReference(value))
215 {
216 char* ptr2 = ptr + value.Length - 1;
217 for (char* ptr4 = ptr3 + (source.Length - value.Length); ptr4 >= ptr3; ptr4--)
218 {
219 char* ptr5 = ptr;
220 char* ptr6 = ptr4;
221 while (ptr5 <= ptr2)
222 {
223 if (!char.IsHighSurrogate(*ptr5) || ptr5 == ptr2)
224 {
225 if (*ptr5 != *ptr6 && ToUpper(*ptr5) != ToUpper(*ptr6))
226 {
227 break;
228 }
229 ptr5++;
230 ptr6++;
231 }
232 else if (char.IsHighSurrogate(*ptr6) && char.IsLowSurrogate(ptr6[1]) && char.IsLowSurrogate(ptr5[1]))
233 {
234 if (!SurrogateCasing.Equal(*ptr6, ptr6[1], *ptr5, ptr5[1]))
235 {
236 break;
237 }
238 ptr6 += 2;
239 ptr5 += 2;
240 }
241 else
242 {
243 if (*ptr5 != *ptr6)
244 {
245 break;
246 }
247 ptr6++;
248 ptr5++;
249 }
250 }
251 if (ptr5 > ptr2)
252 {
253 return (int)(ptr4 - ptr3);
254 }
255 }
256 return -1;
257 }
258 }
259 }

References System.Globalization.SurrogateCasing.Equal(), System.source, System.Globalization.OrdinalCasing.ToUpper(), and System.value.

Referenced by System.Globalization.Ordinal.LastIndexOfOrdinalIgnoreCase().