Index: lib/protobuf/runtime/CodedBufferWriter.dart |
diff --git a/lib/protobuf/runtime/CodedBufferWriter.dart b/lib/protobuf/runtime/CodedBufferWriter.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2b13493867ca4a1508fc338eca3ec20615e6e036 |
--- /dev/null |
+++ b/lib/protobuf/runtime/CodedBufferWriter.dart |
@@ -0,0 +1,279 @@ |
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+class CodedBufferWriter { |
+ |
+ static int computeBoolSize(int fieldNumber, bool value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfBool; |
+ |
+ static int computeBoolSizeNoTag(bool value) => PbCodec.sizeOfBool; |
+ |
+ static int computeBytesSize(int fieldNumber, List<int> value) => |
+ computeTagSize(fieldNumber) + computeBytesSizeNoTag(value); |
+ |
+ static int computeBytesSizeNoTag(List<int> value) => |
+ PbCodec.sizeOfInt32(value.length) + value.length; |
+ |
+ static int computeFloatSize(int fieldNumber, double value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfFixed32; |
+ |
+ static int computeFloatSizeNoTag(double value) => PbCodec.sizeOfFixed32; |
+ |
+ static int computeDoubleSize(int fieldNumber, double value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfFixed64; |
+ |
+ static int computeDoubleSizeNoTag(double value) => PbCodec.sizeOfFixed64; |
+ |
+ static int computeEnumSize(int fieldNumber, int value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfInt32(value); |
+ |
+ static int computeEnumSizeNoTag(ProtobufEnum value) => |
+ PbCodec.sizeOfInt32(value.value); |
+ |
+ static int computeFixed32Size(int fieldNumber, int value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfFixed32; |
+ |
+ static int computeFixed32SizeNoTag(int value) => PbCodec.sizeOfFixed32; |
+ |
+ static int computeFixed64Size(int fieldNumber, var value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfFixed64; |
+ |
+ static int computeFixed64SizeNoTag(var value) => PbCodec.sizeOfFixed64; |
+ |
+ static int computeGroupSize(int fieldNumber, Message value) => |
+ computeTagSize(fieldNumber) * 2 + value.getSerializedSize(); |
+ |
+ static int computeGroupSizeNoTag(Message value) => value.getSerializedSize(); |
+ |
+ static int computeInt32Size(int fieldNumber, int value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfInt32(value); |
+ |
+ static int computeInt32SizeNoTag(int value) => PbCodec.sizeOfInt32(value); |
+ |
+ static int computeInt64Size(int fieldNumber, var value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfInt64(value); |
+ |
+ static int computeInt64SizeNoTag(var value) => PbCodec.sizeOfInt64(value); |
+ |
+ static int computeMessageSize(int fieldNumber, Message value) => |
+ computeTagSize(fieldNumber) + computeMessageSizeNoTag(value); |
+ |
+ static int computeMessageSizeNoTag(Message value) { |
+ final int size = value.getSerializedSize(); |
+ return PbCodec.sizeOfInt32(size) + size; |
+ } |
+ |
+ static int computeSfixed32Size(int fieldNumber, int value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfFixed32; |
+ |
+ static int computeSfixed32SizeNoTag(int value) => PbCodec.sizeOfFixed32; |
+ |
+ static int computeSfixed64Size(int fieldNumber, var value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfFixed64; |
+ |
+ static int computeSfixed64SizeNoTag(var value) => PbCodec.sizeOfFixed64; |
+ |
+ static int computeSint32Size(int fieldNumber, int value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfSint32(value); |
+ |
+ static int computeSint32SizeNoTag(int value) => PbCodec.sizeOfSint32(value); |
+ |
+ static int computeSint64Size(int fieldNumber, var value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfSint64(value); |
+ |
+ static int computeSint64SizeNoTag(var value) => PbCodec.sizeOfSint64(value); |
+ |
+ static int computeStringSize(int fieldNumber, String value) => |
+ computeTagSize(fieldNumber) + computeStringSizeNoTag(value); |
+ |
+ static int computeStringSizeNoTag(String value) => |
+ PbCodec.sizeOfInt32(value.length) + |
+ encodeUtf8(value).length; |
+ |
+ static int computeUint32Size(int fieldNumber, int value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfUint32(value); |
+ |
+ static int computeUint64Size(int fieldNumber, var value) => |
+ computeTagSize(fieldNumber) + PbCodec.sizeOfUint64(value); |
+ |
+ static int computeUint64SizeNoTag(var value) => |
+ PbCodec.sizeOfUint64(value); |
+ |
+ static int computeUint32SizeNoTag(int value) => PbCodec.sizeOfUint32(value); |
+ |
+ static int computeTagSize(int fieldNumber) => |
+ PbCodec.sizeOfInt32(WireFormat.makeTag(fieldNumber, 0)); |
+ |
+ CodedBufferWriter(int length) : |
+ _position = 0, |
+ buffer = createIntArray(length); |
+ |
+ int get length() => _position; |
+ |
+ void writeBool(int fieldNumber, bool value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeBoolNoTag(value); |
+ } |
+ |
+ void writeBoolNoTag(bool value) => writeRawByte(value ? 1 : 0); |
+ |
+ void writeBytes(int fieldNumber, List<int> value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_LENGTH_DELIMITED); |
+ writeBytesNoTag(value); |
+ } |
+ |
+ void writeBytesNoTag(List<int> value) { |
+ writeRawBytes(PbCodec.int32ToBytes(value.length)); |
+ writeRawBytes(value); |
+ } |
+ |
+ void writeDouble(int fieldNumber, double value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); |
+ writeDoubleNoTag(value); |
+ } |
+ |
+ void writeDoubleNoTag(double value) => |
+ writeRawBytes(PbCodec.doubleToBytes(value)); |
+ |
+ void writeEnum(int fieldNumber, ProtobufEnum value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeEnumNoTag(value); |
+ } |
+ |
+ void writeEnumNoTag(ProtobufEnum value) => |
+ writeRawBytes(PbCodec.int32ToBytes(value.value)); |
+ |
+ void writeFixed32(int fieldNumber, int value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); |
+ writeFixed32NoTag(value); |
+ } |
+ |
+ void writeFixed32NoTag(int value) => |
+ writeRawBytes(PbCodec.fixed32ToBytes(value)); |
+ |
+ void writeFixed64(int fieldNumber, var value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); |
+ writeFixed64NoTag(value); |
+ } |
+ |
+ void writeFixed64NoTag(var value) => |
+ writeRawBytes(PbCodec.fixed64ToBytes(value)); |
+ |
+ void writeFloat(int fieldNumber, double value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); |
+ writeFloatNoTag(value); |
+ } |
+ |
+ void writeFloatNoTag(double value) => |
+ writeRawBytes(PbCodec.floatToBytes(value)); |
+ |
+ void writeGroup(int fieldNumber, Message value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_START_GROUP); |
+ writeGroupNoTag(value); |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_END_GROUP); |
+ } |
+ |
+ void writeGroupNoTag(Message value) { |
+ value.writeToCodedBufferWriter(this); |
+ } |
+ |
+ void writeInt32(int fieldNumber, int value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeInt32NoTag(value); |
+ } |
+ |
+ void writeInt32NoTag(int value) => |
+ writeRawBytes(PbCodec.int32ToBytes(value)); |
+ |
+ void writeInt64(int fieldNumber, var value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeInt64NoTag(value); |
+ } |
+ |
+ void writeInt64NoTag(var value) => |
+ writeRawBytes(PbCodec.int64ToBytes(value)); |
+ |
+ void writeMessage(int fieldNumber, Message value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_LENGTH_DELIMITED); |
+ writeMessageNoTag(value); |
+ } |
+ |
+ void writeMessageNoTag(Message value) { |
+ writeInt32NoTag(value.getSerializedSize()); |
+ value.writeToCodedBufferWriter(this); |
+ } |
+ |
+ void writeSfixed32(int fieldNumber, int value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); |
+ writeSfixed32NoTag(value); |
+ } |
+ |
+ void writeSfixed32NoTag(int value) => |
+ writeRawBytes(PbCodec.sfixed32ToBytes(value)); |
+ |
+ void writeSfixed64(int fieldNumber, var value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); |
+ writeSfixed64NoTag(value); |
+ } |
+ |
+ void writeSfixed64NoTag(var value) => |
+ writeRawBytes(PbCodec.sfixed64ToBytes(value)); |
+ |
+ void writeSint32(int fieldNumber, int value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeSint32NoTag(value); |
+ } |
+ |
+ void writeSint32NoTag(int value) => |
+ writeRawBytes(PbCodec.sint32ToBytes(value)); |
+ |
+ void writeSint64(int fieldNumber, var value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeSint64NoTag(value); |
+ } |
+ |
+ void writeSint64NoTag(var value) => |
+ writeRawBytes(PbCodec.sint64ToBytes(value)); |
+ |
+ void writeString(int fieldNumber, String value) => |
+ writeBytes(fieldNumber, encodeUtf8(value)); |
+ |
+ void writeStringNoTag(String value) => |
+ writeBytesNoTag(encodeUtf8(value)); |
+ |
+ void writeUint32(int fieldNumber, int value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeUint32NoTag(value); |
+ } |
+ |
+ void writeUint32NoTag(int value) => |
+ writeRawBytes(PbCodec.uint32ToBytes(value)); |
+ |
+ void writeUint64(int fieldNumber, var value) { |
+ writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
+ writeUint64NoTag(value); |
+ } |
+ |
+ void writeUint64NoTag(var value) => |
+ writeRawBytes(PbCodec.uint64ToBytes(value)); |
+ |
+ void writeTag(int fieldNumber, int wireFormat) => |
+ writeRawBytes(PbCodec.int32ToBytes( |
+ WireFormat.makeTag(fieldNumber, wireFormat))); |
+ |
+ void writeRawByte(int value) { |
+ buffer[_position++] = value & 0xff; |
+ } |
+ |
+ void writeRawBytes(List<int> value, [int offset = 0, int length = null]) { |
+ if (length == null) { |
+ length = value.length - offset; |
+ } |
+ buffer.setRange(_position, length, value, offset); |
+ _position += length; |
+ } |
+ |
+ final List<int> buffer; |
+ int _position; |
+} |