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

◆ EncodeUtf8Core()

virtual OperationStatus System.Text.Encodings.Web.TextEncoder.EncodeUtf8Core ( ReadOnlySpan< byte > utf8Source,
Span< byte > utf8Destination,
out int bytesConsumed,
out int bytesWritten,
bool isFinalBlock )
inlineprotectedvirtualinherited

Reimplemented in System.Text.Encodings.Web.DefaultHtmlEncoder, System.Text.Encodings.Web.DefaultJavaScriptEncoder, and System.Text.Encodings.Web.DefaultUrlEncoder.

Definition at line 183 of file TextEncoder.cs.

184 {
185 int length = utf8Source.Length;
186 int length2 = utf8Destination.Length;
187 Span<char> utf16ScratchBuffer = stackalloc char[24];
188 OperationStatus result2;
189 while (true)
190 {
191 int bytesConsumed2;
192 int num2;
193 if (!utf8Source.IsEmpty)
194 {
195 Rune result;
196 OperationStatus operationStatus = Rune.DecodeFromUtf8(utf8Source, out result, out bytesConsumed2);
197 if (operationStatus != 0)
198 {
199 if (!isFinalBlock && operationStatus == OperationStatus.NeedMoreData)
200 {
201 result2 = OperationStatus.NeedMoreData;
202 break;
203 }
204 }
205 else if (!WillEncode(result.Value))
206 {
207 uint num = (uint)UnicodeHelpers.GetUtf8RepresentationForScalarValue((uint)result.Value);
208 num2 = 0;
209 while ((uint)num2 < (uint)utf8Destination.Length)
210 {
211 utf8Destination[num2++] = (byte)num;
212 if ((num >>= 8) != 0)
213 {
214 continue;
215 }
216 goto IL_008d;
217 }
218 goto IL_00f9;
219 }
220 if (TryEncodeUnicodeScalarUtf8((uint)result.Value, utf16ScratchBuffer, utf8Destination, out var bytesWritten2))
221 {
222 utf8Source = utf8Source.Slice(bytesConsumed2);
223 utf8Destination = utf8Destination.Slice(bytesWritten2);
224 continue;
225 }
226 goto IL_00f9;
227 }
228 result2 = OperationStatus.Done;
229 break;
230 IL_008d:
231 utf8Source = utf8Source.Slice(bytesConsumed2);
232 utf8Destination = utf8Destination.Slice(num2);
233 continue;
234 IL_00f9:
235 result2 = OperationStatus.DestinationTooSmall;
236 break;
237 }
238 bytesConsumed = length - utf8Source.Length;
239 bytesWritten = length2 - utf8Destination.Length;
240 return result2;
241 }
bool TryEncodeUnicodeScalarUtf8(uint unicodeScalar, Span< char > utf16ScratchBuffer, Span< byte > utf8Destination, out int bytesWritten)
bool WillEncode(int unicodeScalar)
static int GetUtf8RepresentationForScalarValue(uint scalar)
ReadOnlySpan< T > Slice(int start)
int Length
Definition Span.cs:70

References System.Text.Rune.DecodeFromUtf8(), System.Text.Unicode.UnicodeHelpers.GetUtf8RepresentationForScalarValue(), System.ReadOnlySpan< T >.IsEmpty, System.length, System.ReadOnlySpan< T >.Length, System.Span< T >.Length, System.length2, System.ReadOnlySpan< T >.Slice(), System.Span< T >.Slice(), System.Text.Encodings.Web.TextEncoder.TryEncodeUnicodeScalarUtf8(), System.Text.Rune.Value, and System.Text.Encodings.Web.TextEncoder.WillEncode().

Referenced by System.Text.Encodings.Web.TextEncoder.EncodeUtf8().