Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SequenceReaderExtensions.cs
Go to the documentation of this file.
5
6namespace System.Buffers;
7
8public static class SequenceReaderExtensions
9{
10 [MethodImpl(MethodImplOptions.AggressiveInlining)]
11 internal unsafe static bool TryRead<T>(this ref SequenceReader<byte> reader, out T value) where T : unmanaged
12 {
13 ReadOnlySpan<byte> unreadSpan = reader.UnreadSpan;
14 if (unreadSpan.Length < sizeof(T))
15 {
16 return TryReadMultisegment<T>(ref reader, out value);
17 }
18 value = Internal.Runtime.CompilerServices.Unsafe.ReadUnaligned<T>(ref MemoryMarshal.GetReference(unreadSpan));
19 reader.Advance(sizeof(T));
20 return true;
21 }
22
23 private unsafe static bool TryReadMultisegment<T>(ref SequenceReader<byte> reader, out T value) where T : unmanaged
24 {
25 T val = default(T);
26 Span<byte> span = new Span<byte>(&val, sizeof(T));
27 if (!reader.TryCopyTo(span))
28 {
29 value = default(T);
30 return false;
31 }
32 value = Internal.Runtime.CompilerServices.Unsafe.ReadUnaligned<T>(ref MemoryMarshal.GetReference(span));
33 reader.Advance(sizeof(T));
34 return true;
35 }
36
37 public static bool TryReadLittleEndian(this ref SequenceReader<byte> reader, out short value)
38 {
40 {
41 return reader.TryRead<short>(out value);
42 }
43 return TryReadReverseEndianness(ref reader, out value);
44 }
45
46 public static bool TryReadBigEndian(this ref SequenceReader<byte> reader, out short value)
47 {
49 {
50 return reader.TryRead<short>(out value);
51 }
52 return TryReadReverseEndianness(ref reader, out value);
53 }
54
55 private static bool TryReadReverseEndianness(ref SequenceReader<byte> reader, out short value)
56 {
57 if (reader.TryRead<short>(out value))
58 {
60 return true;
61 }
62 return false;
63 }
64
65 public static bool TryReadLittleEndian(this ref SequenceReader<byte> reader, out int value)
66 {
68 {
69 return reader.TryRead<int>(out value);
70 }
71 return TryReadReverseEndianness(ref reader, out value);
72 }
73
74 public static bool TryReadBigEndian(this ref SequenceReader<byte> reader, out int value)
75 {
77 {
78 return reader.TryRead<int>(out value);
79 }
80 return TryReadReverseEndianness(ref reader, out value);
81 }
82
83 private static bool TryReadReverseEndianness(ref SequenceReader<byte> reader, out int value)
84 {
85 if (reader.TryRead<int>(out value))
86 {
88 return true;
89 }
90 return false;
91 }
92
93 public static bool TryReadLittleEndian(this ref SequenceReader<byte> reader, out long value)
94 {
96 {
97 return reader.TryRead<long>(out value);
98 }
99 return TryReadReverseEndianness(ref reader, out value);
100 }
101
102 public static bool TryReadBigEndian(this ref SequenceReader<byte> reader, out long value)
103 {
105 {
106 return reader.TryRead<long>(out value);
107 }
108 return TryReadReverseEndianness(ref reader, out value);
109 }
110
111 private static bool TryReadReverseEndianness(ref SequenceReader<byte> reader, out long value)
112 {
113 if (reader.TryRead<long>(out value))
114 {
116 return true;
117 }
118 return false;
119 }
120}
static readonly bool IsLittleEndian
static sbyte ReverseEndianness(sbyte value)
static bool TryReadBigEndian(this ref SequenceReader< byte > reader, out short value)
static bool TryReadBigEndian(this ref SequenceReader< byte > reader, out int value)
static bool TryReadLittleEndian(this ref SequenceReader< byte > reader, out int value)
static bool TryReadReverseEndianness(ref SequenceReader< byte > reader, out short value)
static unsafe bool TryRead< T >(this ref SequenceReader< byte > reader, out T value)
static bool TryReadReverseEndianness(ref SequenceReader< byte > reader, out int value)
static bool TryReadReverseEndianness(ref SequenceReader< byte > reader, out long value)
static unsafe bool TryReadMultisegment< T >(ref SequenceReader< byte > reader, out T value)
static bool TryReadLittleEndian(this ref SequenceReader< byte > reader, out short value)
static bool TryReadBigEndian(this ref SequenceReader< byte > reader, out long value)
static bool TryReadLittleEndian(this ref SequenceReader< byte > reader, out long value)