OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 class CodedBufferWriter { |
| 6 |
| 7 static int computeBoolSize(int fieldNumber, bool value) => |
| 8 computeTagSize(fieldNumber) + PbCodec.sizeOfBool; |
| 9 |
| 10 static int computeBoolSizeNoTag(bool value) => PbCodec.sizeOfBool; |
| 11 |
| 12 static int computeBytesSize(int fieldNumber, List<int> value) => |
| 13 computeTagSize(fieldNumber) + computeBytesSizeNoTag(value); |
| 14 |
| 15 static int computeBytesSizeNoTag(List<int> value) => |
| 16 PbCodec.sizeOfInt32(value.length) + value.length; |
| 17 |
| 18 static int computeFloatSize(int fieldNumber, double value) => |
| 19 computeTagSize(fieldNumber) + PbCodec.sizeOfFixed32; |
| 20 |
| 21 static int computeFloatSizeNoTag(double value) => PbCodec.sizeOfFixed32; |
| 22 |
| 23 static int computeDoubleSize(int fieldNumber, double value) => |
| 24 computeTagSize(fieldNumber) + PbCodec.sizeOfFixed64; |
| 25 |
| 26 static int computeDoubleSizeNoTag(double value) => PbCodec.sizeOfFixed64; |
| 27 |
| 28 static int computeEnumSize(int fieldNumber, int value) => |
| 29 computeTagSize(fieldNumber) + PbCodec.sizeOfInt32(value); |
| 30 |
| 31 static int computeEnumSizeNoTag(ProtobufEnum value) => |
| 32 PbCodec.sizeOfInt32(value.value); |
| 33 |
| 34 static int computeFixed32Size(int fieldNumber, int value) => |
| 35 computeTagSize(fieldNumber) + PbCodec.sizeOfFixed32; |
| 36 |
| 37 static int computeFixed32SizeNoTag(int value) => PbCodec.sizeOfFixed32; |
| 38 |
| 39 static int computeFixed64Size(int fieldNumber, var value) => |
| 40 computeTagSize(fieldNumber) + PbCodec.sizeOfFixed64; |
| 41 |
| 42 static int computeFixed64SizeNoTag(var value) => PbCodec.sizeOfFixed64; |
| 43 |
| 44 static int computeGroupSize(int fieldNumber, Message value) => |
| 45 computeTagSize(fieldNumber) * 2 + value.getSerializedSize(); |
| 46 |
| 47 static int computeGroupSizeNoTag(Message value) => value.getSerializedSize(); |
| 48 |
| 49 static int computeInt32Size(int fieldNumber, int value) => |
| 50 computeTagSize(fieldNumber) + PbCodec.sizeOfInt32(value); |
| 51 |
| 52 static int computeInt32SizeNoTag(int value) => PbCodec.sizeOfInt32(value); |
| 53 |
| 54 static int computeInt64Size(int fieldNumber, var value) => |
| 55 computeTagSize(fieldNumber) + PbCodec.sizeOfInt64(value); |
| 56 |
| 57 static int computeInt64SizeNoTag(var value) => PbCodec.sizeOfInt64(value); |
| 58 |
| 59 static int computeMessageSize(int fieldNumber, Message value) => |
| 60 computeTagSize(fieldNumber) + computeMessageSizeNoTag(value); |
| 61 |
| 62 static int computeMessageSizeNoTag(Message value) { |
| 63 final int size = value.getSerializedSize(); |
| 64 return PbCodec.sizeOfInt32(size) + size; |
| 65 } |
| 66 |
| 67 static int computeSfixed32Size(int fieldNumber, int value) => |
| 68 computeTagSize(fieldNumber) + PbCodec.sizeOfFixed32; |
| 69 |
| 70 static int computeSfixed32SizeNoTag(int value) => PbCodec.sizeOfFixed32; |
| 71 |
| 72 static int computeSfixed64Size(int fieldNumber, var value) => |
| 73 computeTagSize(fieldNumber) + PbCodec.sizeOfFixed64; |
| 74 |
| 75 static int computeSfixed64SizeNoTag(var value) => PbCodec.sizeOfFixed64; |
| 76 |
| 77 static int computeSint32Size(int fieldNumber, int value) => |
| 78 computeTagSize(fieldNumber) + PbCodec.sizeOfSint32(value); |
| 79 |
| 80 static int computeSint32SizeNoTag(int value) => PbCodec.sizeOfSint32(value); |
| 81 |
| 82 static int computeSint64Size(int fieldNumber, var value) => |
| 83 computeTagSize(fieldNumber) + PbCodec.sizeOfSint64(value); |
| 84 |
| 85 static int computeSint64SizeNoTag(var value) => PbCodec.sizeOfSint64(value); |
| 86 |
| 87 static int computeStringSize(int fieldNumber, String value) => |
| 88 computeTagSize(fieldNumber) + computeStringSizeNoTag(value); |
| 89 |
| 90 static int computeStringSizeNoTag(String value) => |
| 91 PbCodec.sizeOfInt32(value.length) + |
| 92 encodeUtf8(value).length; |
| 93 |
| 94 static int computeUint32Size(int fieldNumber, int value) => |
| 95 computeTagSize(fieldNumber) + PbCodec.sizeOfUint32(value); |
| 96 |
| 97 static int computeUint64Size(int fieldNumber, var value) => |
| 98 computeTagSize(fieldNumber) + PbCodec.sizeOfUint64(value); |
| 99 |
| 100 static int computeUint64SizeNoTag(var value) => |
| 101 PbCodec.sizeOfUint64(value); |
| 102 |
| 103 static int computeUint32SizeNoTag(int value) => PbCodec.sizeOfUint32(value); |
| 104 |
| 105 static int computeTagSize(int fieldNumber) => |
| 106 PbCodec.sizeOfInt32(WireFormat.makeTag(fieldNumber, 0)); |
| 107 |
| 108 CodedBufferWriter(int length) : |
| 109 _position = 0, |
| 110 buffer = createIntArray(length); |
| 111 |
| 112 int get length() => _position; |
| 113 |
| 114 void writeBool(int fieldNumber, bool value) { |
| 115 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 116 writeBoolNoTag(value); |
| 117 } |
| 118 |
| 119 void writeBoolNoTag(bool value) => writeRawByte(value ? 1 : 0); |
| 120 |
| 121 void writeBytes(int fieldNumber, List<int> value) { |
| 122 writeTag(fieldNumber, WireFormat.WIRETYPE_LENGTH_DELIMITED); |
| 123 writeBytesNoTag(value); |
| 124 } |
| 125 |
| 126 void writeBytesNoTag(List<int> value) { |
| 127 writeRawBytes(PbCodec.int32ToBytes(value.length)); |
| 128 writeRawBytes(value); |
| 129 } |
| 130 |
| 131 void writeDouble(int fieldNumber, double value) { |
| 132 writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); |
| 133 writeDoubleNoTag(value); |
| 134 } |
| 135 |
| 136 void writeDoubleNoTag(double value) => |
| 137 writeRawBytes(PbCodec.doubleToBytes(value)); |
| 138 |
| 139 void writeEnum(int fieldNumber, ProtobufEnum value) { |
| 140 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 141 writeEnumNoTag(value); |
| 142 } |
| 143 |
| 144 void writeEnumNoTag(ProtobufEnum value) => |
| 145 writeRawBytes(PbCodec.int32ToBytes(value.value)); |
| 146 |
| 147 void writeFixed32(int fieldNumber, int value) { |
| 148 writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); |
| 149 writeFixed32NoTag(value); |
| 150 } |
| 151 |
| 152 void writeFixed32NoTag(int value) => |
| 153 writeRawBytes(PbCodec.fixed32ToBytes(value)); |
| 154 |
| 155 void writeFixed64(int fieldNumber, var value) { |
| 156 writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); |
| 157 writeFixed64NoTag(value); |
| 158 } |
| 159 |
| 160 void writeFixed64NoTag(var value) => |
| 161 writeRawBytes(PbCodec.fixed64ToBytes(value)); |
| 162 |
| 163 void writeFloat(int fieldNumber, double value) { |
| 164 writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); |
| 165 writeFloatNoTag(value); |
| 166 } |
| 167 |
| 168 void writeFloatNoTag(double value) => |
| 169 writeRawBytes(PbCodec.floatToBytes(value)); |
| 170 |
| 171 void writeGroup(int fieldNumber, Message value) { |
| 172 writeTag(fieldNumber, WireFormat.WIRETYPE_START_GROUP); |
| 173 writeGroupNoTag(value); |
| 174 writeTag(fieldNumber, WireFormat.WIRETYPE_END_GROUP); |
| 175 } |
| 176 |
| 177 void writeGroupNoTag(Message value) { |
| 178 value.writeToCodedBufferWriter(this); |
| 179 } |
| 180 |
| 181 void writeInt32(int fieldNumber, int value) { |
| 182 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 183 writeInt32NoTag(value); |
| 184 } |
| 185 |
| 186 void writeInt32NoTag(int value) => |
| 187 writeRawBytes(PbCodec.int32ToBytes(value)); |
| 188 |
| 189 void writeInt64(int fieldNumber, var value) { |
| 190 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 191 writeInt64NoTag(value); |
| 192 } |
| 193 |
| 194 void writeInt64NoTag(var value) => |
| 195 writeRawBytes(PbCodec.int64ToBytes(value)); |
| 196 |
| 197 void writeMessage(int fieldNumber, Message value) { |
| 198 writeTag(fieldNumber, WireFormat.WIRETYPE_LENGTH_DELIMITED); |
| 199 writeMessageNoTag(value); |
| 200 } |
| 201 |
| 202 void writeMessageNoTag(Message value) { |
| 203 writeInt32NoTag(value.getSerializedSize()); |
| 204 value.writeToCodedBufferWriter(this); |
| 205 } |
| 206 |
| 207 void writeSfixed32(int fieldNumber, int value) { |
| 208 writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); |
| 209 writeSfixed32NoTag(value); |
| 210 } |
| 211 |
| 212 void writeSfixed32NoTag(int value) => |
| 213 writeRawBytes(PbCodec.sfixed32ToBytes(value)); |
| 214 |
| 215 void writeSfixed64(int fieldNumber, var value) { |
| 216 writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); |
| 217 writeSfixed64NoTag(value); |
| 218 } |
| 219 |
| 220 void writeSfixed64NoTag(var value) => |
| 221 writeRawBytes(PbCodec.sfixed64ToBytes(value)); |
| 222 |
| 223 void writeSint32(int fieldNumber, int value) { |
| 224 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 225 writeSint32NoTag(value); |
| 226 } |
| 227 |
| 228 void writeSint32NoTag(int value) => |
| 229 writeRawBytes(PbCodec.sint32ToBytes(value)); |
| 230 |
| 231 void writeSint64(int fieldNumber, var value) { |
| 232 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 233 writeSint64NoTag(value); |
| 234 } |
| 235 |
| 236 void writeSint64NoTag(var value) => |
| 237 writeRawBytes(PbCodec.sint64ToBytes(value)); |
| 238 |
| 239 void writeString(int fieldNumber, String value) => |
| 240 writeBytes(fieldNumber, encodeUtf8(value)); |
| 241 |
| 242 void writeStringNoTag(String value) => |
| 243 writeBytesNoTag(encodeUtf8(value)); |
| 244 |
| 245 void writeUint32(int fieldNumber, int value) { |
| 246 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 247 writeUint32NoTag(value); |
| 248 } |
| 249 |
| 250 void writeUint32NoTag(int value) => |
| 251 writeRawBytes(PbCodec.uint32ToBytes(value)); |
| 252 |
| 253 void writeUint64(int fieldNumber, var value) { |
| 254 writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); |
| 255 writeUint64NoTag(value); |
| 256 } |
| 257 |
| 258 void writeUint64NoTag(var value) => |
| 259 writeRawBytes(PbCodec.uint64ToBytes(value)); |
| 260 |
| 261 void writeTag(int fieldNumber, int wireFormat) => |
| 262 writeRawBytes(PbCodec.int32ToBytes( |
| 263 WireFormat.makeTag(fieldNumber, wireFormat))); |
| 264 |
| 265 void writeRawByte(int value) { |
| 266 buffer[_position++] = value & 0xff; |
| 267 } |
| 268 |
| 269 void writeRawBytes(List<int> value, [int offset = 0, int length = null]) { |
| 270 if (length == null) { |
| 271 length = value.length - offset; |
| 272 } |
| 273 buffer.setRange(_position, length, value, offset); |
| 274 _position += length; |
| 275 } |
| 276 |
| 277 final List<int> buffer; |
| 278 int _position; |
| 279 } |
OLD | NEW |