diff options
Diffstat (limited to 'src/ProtocolBuffers/CodedOutputStream.cs')
-rw-r--r-- | src/ProtocolBuffers/CodedOutputStream.cs | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/src/ProtocolBuffers/CodedOutputStream.cs b/src/ProtocolBuffers/CodedOutputStream.cs index 31032058..bd508661 100644 --- a/src/ProtocolBuffers/CodedOutputStream.cs +++ b/src/ProtocolBuffers/CodedOutputStream.cs @@ -38,6 +38,7 @@ using System; using System.Collections.Generic;
using System.Globalization;
using System.IO;
+using System.Runtime.InteropServices;
using System.Text;
using Google.ProtocolBuffers.Descriptors;
@@ -648,7 +649,20 @@ namespace Google.ProtocolBuffers byte[] rawBytes = BitConverter.GetBytes(value);
if (!BitConverter.IsLittleEndian)
Array.Reverse(rawBytes);
- WriteRawBytes(rawBytes, 0, 8);
+
+ if (limit - position >= 8)
+ {
+ buffer[position++] = rawBytes[0];
+ buffer[position++] = rawBytes[1];
+ buffer[position++] = rawBytes[2];
+ buffer[position++] = rawBytes[3];
+ buffer[position++] = rawBytes[4];
+ buffer[position++] = rawBytes[5];
+ buffer[position++] = rawBytes[6];
+ buffer[position++] = rawBytes[7];
+ }
+ else
+ WriteRawBytes(rawBytes, 0, 8);
#else
WriteRawLittleEndian64((ulong)BitConverter.DoubleToInt64Bits(value));
#endif
@@ -662,7 +676,16 @@ namespace Google.ProtocolBuffers byte[] rawBytes = BitConverter.GetBytes(value);
if (!BitConverter.IsLittleEndian)
Array.Reverse(rawBytes);
- WriteRawBytes(rawBytes, 0, 4);
+
+ if (limit - position >= 4)
+ {
+ buffer[position++] = rawBytes[0];
+ buffer[position++] = rawBytes[1];
+ buffer[position++] = rawBytes[2];
+ buffer[position++] = rawBytes[3];
+ }
+ else
+ WriteRawBytes(rawBytes, 0, 4);
}
/// <summary>
@@ -985,7 +1008,7 @@ namespace Google.ProtocolBuffers {
if (limit - position >= length)
{
- Array.Copy(value, offset, buffer, position, length);
+ Bytes.Copy(value, offset, buffer, position, length);
// We have room in the current buffer.
position += length;
}
@@ -994,7 +1017,7 @@ namespace Google.ProtocolBuffers // Write extends past current buffer. Fill the rest of this buffer and
// flush.
int bytesWritten = limit - position;
- Array.Copy(value, offset, buffer, position, bytesWritten);
+ Bytes.Copy(value, offset, buffer, position, bytesWritten);
offset += bytesWritten;
length -= bytesWritten;
position = limit;
@@ -1006,7 +1029,7 @@ namespace Google.ProtocolBuffers if (length <= limit)
{
// Fits in new buffer.
- Array.Copy(value, offset, buffer, 0, length);
+ Bytes.Copy(value, offset, buffer, 0, length);
position = length;
}
else
|