|
@@ -179,12 +179,23 @@ namespace Google.Protobuf
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- // TODO: optimize this part!!!!
|
|
|
+#if NETSTANDARD1_1
|
|
|
+ // slowpath when Encoding.GetBytes(Char*, Int32, Byte*, Int32) is not available
|
|
|
byte[] bytes = Utf8Encoding.GetBytes(value);
|
|
|
WriteRawBytes(ref buffer, ref state, bytes);
|
|
|
- // TODO: we need to write to a span...
|
|
|
- //Utf8Encoding.GetBytes(value, 0, value.Length, buffer, state.position);
|
|
|
- //state.position += length;
|
|
|
+#else
|
|
|
+ ReadOnlySpan<char> source = value.AsSpan();
|
|
|
+ int bytesUsed;
|
|
|
+ unsafe
|
|
|
+ {
|
|
|
+ fixed (char* sourceChars = &MemoryMarshal.GetReference(source))
|
|
|
+ fixed (byte* destinationBytes = &MemoryMarshal.GetReference(buffer.Slice(state.position)))
|
|
|
+ {
|
|
|
+ bytesUsed = Utf8Encoding.GetBytes(sourceChars, source.Length, destinationBytes, buffer.Length);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ state.position += bytesUsed;
|
|
|
+#endif
|
|
|
}
|
|
|
}
|
|
|
else
|