Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(726)

Side by Side Diff: lib/protobuf/runtime/UnknownFieldSet.dart

Issue 10595002: Protocol Buffer runtime library and 'protoc' plugin (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Work around http://code.google.com/p/dart/issues/detail?id=3806 Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « lib/protobuf/runtime/Protobuf_client.dart ('k') | lib/protobuf/runtime/WireFormat.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 UnknownFieldSet implements Message {
6
7 static UnknownFieldSet _defaultInstance;
8
9 static UnknownFieldSet get defaultInstance() {
10 if (_defaultInstance == null) {
11 _defaultInstance =
12 new UnknownFieldSet
13 ._fromBuilder(new Map<int, UnknownFieldSet_Field>());
14 }
15 return _defaultInstance;
16 }
17
18 Map<int, UnknownFieldSet_Field> _fields;
19
20 UnknownFieldSet._fromBuilder(Map<int, UnknownFieldSet_Field> this._fields);
21
22 Map<int, UnknownFieldSet_Field> asMap() => new Map.from(_fields);
23
24 UnknownFieldSet_Field getField(int tagNumber) => _fields[tagNumber];
25
26 int getSerializedSize() {
27 int result = 0;
28 for (int key in _fields.getKeys()) {
29 result += _fields[key].getSerializedSize(key);
30 }
31 return result;
32 }
33
34 bool hasField(int tagNumber) => _fields.containsKey(tagNumber);
35
36 bool hasRequiredFields() => false;
37
38 bool operator ==(Object other) {
39 if (other is! UnknownFieldSet) return false;
40 UnknownFieldSet o = other;
41 if (_fields.length != o._fields.length) return false;
42 for (int key in _fields.getKeys()) {
43 if (_fields[key] != o._fields[key]) {
44 return false;
45 }
46 }
47 return true;
48 }
49
50 int hashCode() {
51 int hash = 0;
52 _fields.forEach(_(key, value) {
53 hash = (19 * hash) + key;
54 hash = (27 * hash) + value.hashCode();
55 });
56 return hash;
57 }
58
59 bool isInitialized() => true;
60
61 String toString() => _toString("");
62
63 String _toString(String indent) {
64 StringBuffer s = new StringBuffer();
65
66 // Sort output by tag number
67
68 List<int> tags = _fields.getKeys();
69 tags.sort((a, b) => a.compareTo(b));
70
71 for (int tag in tags) {
72 UnknownFieldSet_Field field = _fields[tag];
73 for (var value in field.values) {
74 if (value is UnknownFieldSet) {
75 s.add("${indent}${tag}: {\n");
76 s.add(value._toString("$indent "));
77 s.add("${indent}}\n");
78 } else {
79 s.add("${indent}${tag}: ${value}\n");
80 }
81 }
82 }
83 return s.toString();
84 }
85
86 void writeToCodedBufferWriter(CodedBufferWriter output) {
87 for (int key in _fields.getKeys()) {
88 _fields[key].writeTo(key, output);
89 }
90 }
91
92 void _findInvalidFields(List<String> invalidFields, String prefix) {
93 // no-op
94 }
95
96 // This method is never called from library code, it exists to satisfy the
97 // [Message] interface.
98 String writeToJson() {
99 throw new PbException("JSON output of unknown fields is not supported");
100 }
101 }
102
103 class UnknownFieldSet_Builder {
104
105 Map<int, UnknownFieldSet_Field> _fields;
106 UnknownFieldSet_Field_Builder _lastField;
107 int _lastFieldNumber;
108
109 UnknownFieldSet_Builder([UnknownFieldSet copyFrom]) {
110 initialize_();
111 if (copyFrom != null) mergeFromUnknownFieldSet(copyFrom);
112 }
113
114 UnknownFieldSet_Builder addField(int number, UnknownFieldSet_Field field) {
115 _checkFieldNumber(number);
116 if (_lastField != null && _lastFieldNumber == number) {
117 // Discard this.
118 _lastField = null;
119 _lastFieldNumber = 0;
120 }
121 if (_fields == null || _fields.isEmpty()) {
122 _fields = new Map<int, UnknownFieldSet_Field>();
123 }
124 _fields[number] = field;
125 return this;
126 }
127
128 UnknownFieldSet build() {
129 _getFieldBuilder(0); // Force lastField to be built.
130 UnknownFieldSet result;
131 if (_fields.isEmpty()) {
132 result = UnknownFieldSet.defaultInstance;
133 } else {
134 result = new UnknownFieldSet._fromBuilder(_fields);
135 }
136 return result;
137 }
138
139 void clear() {
140 initialize_();
141 }
142
143 bool isInitialized() => true;
144
145 UnknownFieldSet_Builder mergeField(int number, UnknownFieldSet_Field field) {
146 _checkFieldNumber(number);
147 if (number == _lastFieldNumber || _fields.containsKey(number)) {
148 _getFieldBuilder(number).mergeFromField(field);
149 } else {
150 // Optimization: We could call getFieldBuilder(number).mergeFrom(field)
151 // in this case, but that would create a copy of the Field object.
152 // We'd rather reuse the one passed to us, so call addField() instead.
153 addField(number, field);
154 }
155 return this;
156 }
157
158 bool mergeFieldFromBuffer(int tag, CodedBufferReader input) {
159 int number = WireFormat.getTagFieldNumber(tag);
160 switch (WireFormat.getTagWireType(tag)) {
161 case WireFormat.WIRETYPE_VARINT:
162 mergeVarintField(number, input.readInt64());
163 return true;
164 case WireFormat.WIRETYPE_FIXED64:
165 Packed64 packed = new Packed64.fromBytes(input.readRaw64());
166 mergeFixed64Field(number, packed);
167 return true;
168 case WireFormat.WIRETYPE_LENGTH_DELIMITED:
169 mergeLengthDelimitedField(number, input.readBytes());
170 return true;
171 case WireFormat.WIRETYPE_START_GROUP:
172 UnknownFieldSet_Builder subBuilder = new UnknownFieldSet_Builder();
173 input.readUnknownFieldSetGroup(number, subBuilder);
174 mergeGroupField(number, subBuilder.build());
175 return true;
176 case WireFormat.WIRETYPE_END_GROUP:
177 return false;
178 case WireFormat.WIRETYPE_FIXED32:
179 mergeFixed32Field(number, input.readFixed32());
180 return true;
181 default:
182 throw InvalidProtocolBufferException.invalidWireType();
183 }
184 }
185
186 Future<bool> mergeFieldFromStream(int tag, CodedStreamReader input) {
187 int number = WireFormat.getTagFieldNumber(tag);
188 switch (WireFormat.getTagWireType(tag)) {
189 case WireFormat.WIRETYPE_VARINT:
190 return input.readInt64().transform(_(Dynamic varint) {
191 mergeVarintField(number, varint);
192 return true;
193 });
194 case WireFormat.WIRETYPE_FIXED64:
195 return input.readFixed64().transform(_(int fixed64) {
196 Packed64 packed = new Packed64.fromInt(fixed64);
197 mergeFixed64Field(number, packed);
198 return true;
199 });
200 case WireFormat.WIRETYPE_LENGTH_DELIMITED:
201 input.readBytes().transform((List<int> bytes) {
202 mergeLengthDelimitedField(number, bytes);
203 return true;
204 });
205 case WireFormat.WIRETYPE_START_GROUP:
206 UnknownFieldSet_Builder subBuilder = new UnknownFieldSet_Builder();
207 return input.readUnknownFieldSetGroup(number, subBuilder,
208 ExtensionRegistry.EMPTY_REGISTRY).transform(bool f(_) {
209 mergeGroupField(number, subBuilder.build());
210 return true;
211 });
212 case WireFormat.WIRETYPE_END_GROUP:
213 return new Future<bool>.immediate(false);
214 case WireFormat.WIRETYPE_FIXED32:
215 return input.readFixed32().transform(_(int fixed32) {
216 mergeFixed32Field(number, fixed32);
217 return true;
218 });
219 default:
220 throw InvalidProtocolBufferException.invalidWireType();
221 }
222 }
223
224 void mergeFromCodedBufferReader(CodedBufferReader input) {
225 while (true) {
226 int tag = input.readTag();
227 if (tag == 0 || !mergeFieldFromBuffer(tag, input)) {
228 break;
229 }
230 }
231 }
232
233 Future mergeFromCodedStreamReader(CodedStreamReader input) {
234 return input.readTag().chain((int tag) {
235 Future<bool> done;
236 if (tag != 0) {
237 done = mergeFieldFromStream(tag, input);
238 } else {
239 done = new Future.immediate(false);
240 }
241 return done.chain((bool result) {
242 if(result) {
243 return mergeFromCodedStreamReader(input);
244 } else {
245 return new Future.immediate(null);
246 }
247 });
248 });
249 }
250
251 UnknownFieldSet_Builder mergeFromUnknownFieldSet(UnknownFieldSet other) {
252 if (other !== UnknownFieldSet.defaultInstance) {
253 for (int key in other._fields.getKeys()) {
254 mergeField(key, other._fields[key]);
255 }
256 }
257 return this;
258 }
259
260 _checkFieldNumber(int number) {
261 if (number == 0) {
262 throw 'new IllegalArgumentException("Zero is not a valid field number.")';
263 }
264 }
265
266 UnknownFieldSet_Builder mergeFixed32Field(int number, int value) {
267 _checkFieldNumber(number);
268 _getFieldBuilder(number).addFixed32(value);
269 return this;
270 }
271
272 UnknownFieldSet_Builder mergeFixed64Field(int number, Packed64 value) {
273 _checkFieldNumber(number);
274 _getFieldBuilder(number).addFixed64(value);
275 return this;
276 }
277
278 UnknownFieldSet_Builder mergeGroupField(int number, UnknownFieldSet value) {
279 _checkFieldNumber(number);
280 _getFieldBuilder(number).addGroup(value);
281 return this;
282 }
283
284 UnknownFieldSet_Builder mergeLengthDelimitedField(int number,
285 List<int> value) {
286 _checkFieldNumber(number);
287 _getFieldBuilder(number).addLengthDelimited(value);
288 return this;
289 }
290
291 UnknownFieldSet_Builder mergeVarintField(int number, Dynamic value) {
292 _checkFieldNumber(number);
293 _getFieldBuilder(number).addVarint(value);
294 return this;
295 }
296
297 void initialize_() {
298 _fields = new Map<int, UnknownFieldSet_Field>();
299 _lastFieldNumber = 0;
300 _lastField = null;
301 }
302
303 UnknownFieldSet_Field_Builder _getFieldBuilder(int number) {
304 if (_lastField != null) {
305 if (number == _lastFieldNumber) {
306 return _lastField;
307 }
308 // Note: addField() will reset lastField and lastFieldNumber.
309 addField(_lastFieldNumber, _lastField.buildField());
310 }
311 if (number == 0) {
312 return null;
313 } else {
314 UnknownFieldSet_Field existing = _fields != null ? _fields[number] : null;
315 _lastFieldNumber = number;
316 _lastField = new UnknownFieldSet_Field_Builder();
317 if (existing != null) {
318 _lastField.mergeFromField(existing);
319 }
320 return _lastField;
321 }
322 }
323 }
324
325 class UnknownFieldSet_Field {
326
327 List<List<int>> _lengthDelimited;
328 List<Dynamic> _varint;
329 List<int> _fixed32;
330 List<Packed64> _fixed64;
331 List<UnknownFieldSet> _group;
332
333 UnknownFieldSet_Field();
334
335 bool operator ==(Object other) {
336 if (other is! UnknownFieldSet_Field) return false;
337 UnknownFieldSet_Field o = other;
338 if (_lengthDelimited.length != o._lengthDelimited.length) return false;
339 for (int i = 0; i < _lengthDelimited.length; i++) {
340 List<int> myLengthDelimited = _lengthDelimited[i];
341 List<int> theirLengthDelimited = o._lengthDelimited[i];
342 if (myLengthDelimited.length != theirLengthDelimited.length) {
343 return false;
344 }
345 for (int j = 0; j < myLengthDelimited.length; j++) {
346 if (myLengthDelimited[j] != theirLengthDelimited[j]) return false;
347 }
348 }
349 if (_varint != o._varint) return false;
350 if (_fixed32 != o._fixed32) return false;
351 if (_fixed64 != o._fixed64) return false;
352 if (_group != o._group) return false;
353 return true;
354 }
355
356 int hashCode() {
357 int hash = 7;
358 _lengthDelimited.forEach(_(List<int> e) {
359 hash += 5;
360 e.forEach((int f) => hash = (hash * 11) + f);
361 });
362 _varint.forEach((Dynamic e) => hash = (hash * 13) + e.hashCode());
363 _fixed32.forEach((int e) => hash = (hash * 17) + e);
364 _fixed64.forEach((Packed64 e) => hash = (hash * 23) + e.hashCode());
365 _group.forEach((UnknownFieldSet e) => hash = (hash * 29) + e.hashCode());
366 return hash;
367 }
368
369 List<List<int>> get lengthDelimitedList() => _lengthDelimited;
370 List<Dynamic> get varintList() => _varint;
371 List<int> get fixed32List() => _fixed32;
372 List<Packed64> get fixed64List() => _fixed64;
373 List<UnknownFieldSet> get groupList() => _group;
374 List<Dynamic> get values() {
375 List<Dynamic> v = <Dynamic>[];
376 if (_lengthDelimited != null) v.addAll(_lengthDelimited);
377 if (_varint != null) v.addAll(_varint);
378 if (_fixed32 != null) v.addAll(_fixed32);
379 if (_fixed64 != null) v.addAll(_fixed64);
380 if (_group != null) v.addAll(_group);
381 return v;
382 }
383
384 int getSerializedSize(int fieldNumber) {
385 int result = 0;
386 for (Dynamic value in _varint) {
387 result += CodedBufferWriter.computeUint64Size(fieldNumber, value);
388 }
389 for (int value in _fixed32) {
390 result += CodedBufferWriter.computeFixed32Size(fieldNumber, value);
391 }
392 for (Packed64 value in _fixed64) {
393 result += CodedBufferWriter.computeFixed64Size(fieldNumber, value);
394 }
395 for (List<int> value in _lengthDelimited) {
396 result += CodedBufferWriter.computeBytesSize(fieldNumber, value);
397 }
398 for (UnknownFieldSet value in _group) {
399 result += CodedBufferWriter.computeGroupSize(fieldNumber, value);
400 }
401 return result;
402 }
403
404 void writeTo(int fieldNumber, CodedBufferWriter output) {
405 for (Dynamic value in _varint) {
406 output.writeUint64(fieldNumber, value);
407 }
408 for (int value in _fixed32) {
409 output.writeFixed32(fieldNumber, value);
410 }
411 for (Packed64 value in _fixed64) {
412 output.writeFixed64(fieldNumber, value);
413 }
414 for (List<int> value in _lengthDelimited) {
415 output.writeBytes(fieldNumber, value);
416 }
417 for (UnknownFieldSet value in _group) {
418 output.writeGroup(fieldNumber, value);
419 }
420 }
421
422 void _findInvalidFields(List<String> invalidFields, String prefix) {
423 // no-op
424 }
425 }
426
427 class UnknownFieldSet_Field_Builder {
428
429 static UnknownFieldSet_Field_Builder create() {
430 UnknownFieldSet_Field_Builder builder = new UnknownFieldSet_Field_Builder();
431 builder._result = new UnknownFieldSet_Field();
432 return builder;
433 }
434
435 UnknownFieldSet_Field _result;
436
437 UnknownFieldSet_Field_Builder() : _result = new UnknownFieldSet_Field();
438
439 void initialize_() {
440 if (_result == null) _result = new UnknownFieldSet_Field();
441 }
442
443 UnknownFieldSet_Field_Builder addGroup(UnknownFieldSet value) {
444 initialize_();
445 if (_result._group == null) _result._group = new List<UnknownFieldSet>();
446 _result._group.add(value);
447 return this;
448 }
449
450 UnknownFieldSet_Field_Builder addLengthDelimited(List<int> value) {
451 initialize_();
452 if (_result._lengthDelimited == null) {
453 _result._lengthDelimited = new List<List<int>>();
454 }
455 _result._lengthDelimited.add(value);
456 return this;
457 }
458
459 UnknownFieldSet_Field_Builder addFixed32(int value) {
460 initialize_();
461 if (_result._fixed32 == null) _result._fixed32 = new List<int>();
462 _result._fixed32.add(value);
463 return this;
464 }
465
466 UnknownFieldSet_Field_Builder addFixed64(Packed64 value) {
467 initialize_();
468 if (_result._fixed64 == null) _result._fixed64 = new List<Packed64>();
469 _result._fixed64.add(value);
470 return this;
471 }
472
473 UnknownFieldSet_Field_Builder addVarint(Dynamic value) {
474 initialize_();
475 if (_result._varint == null) _result._varint = new List<Dynamic>();
476 _result._varint.add(value);
477 return this;
478 }
479
480 UnknownFieldSet_Field build() => buildField();
481
482 UnknownFieldSet_Field buildField() {
483 UnknownFieldSet_Field returnMe = new UnknownFieldSet_Field();
484 if (_result._varint == null) {
485 returnMe._varint = new List<Dynamic>(0);
486 } else {
487 returnMe._varint = new PbImmutableList.from(_result._varint);
488 }
489 if (_result._fixed32 == null) {
490 returnMe._fixed32 = new List<int>(0);
491 } else {
492 returnMe._fixed32 = new PbImmutableList.from(_result._fixed32);
493 }
494 if (_result._fixed64 == null) {
495 returnMe._fixed64 = new List<Packed64>(0);
496 } else {
497 returnMe._fixed64 = new PbImmutableList.from(_result._fixed64);
498 }
499 if (_result._lengthDelimited == null) {
500 returnMe._lengthDelimited = new List<List<int>>(0);
501 } else {
502 returnMe._lengthDelimited =
503 new PbImmutableList.from(_result._lengthDelimited);
504 }
505 if (_result._group == null) {
506 returnMe._group = new List<UnknownFieldSet>(0);
507 } else {
508 returnMe._group = new PbImmutableList.from(_result._group);
509 }
510 return returnMe;
511 }
512
513 Message buildPartial() => null;
514
515 bool hasRequiredFields() => false;
516
517 bool isInitialized() => true;
518
519 int get length() => _result.values.length;
520
521 UnknownFieldSet_Field_Builder mergeFromField(UnknownFieldSet_Field other) {
522 if (!other._varint.isEmpty()) {
523 if (_result._varint == null) {
524 _result._varint = new List<Dynamic>();
525 }
526 _result._varint.addAll(other._varint);
527 }
528 if (!other._fixed32.isEmpty()) {
529 if (_result._fixed32 == null) {
530 _result._fixed32 = new List<int>();
531 }
532 _result._fixed32.addAll(other._fixed32);
533 }
534 if (!other._fixed64.isEmpty()) {
535 if (_result._fixed64 == null) {
536 _result._fixed64 = new List<Packed64>();
537 }
538 _result._fixed64.addAll(other._fixed64);
539 }
540 if (!other._lengthDelimited.isEmpty()) {
541 if (_result._lengthDelimited == null) {
542 _result._lengthDelimited = new List<List<int>>();
543 }
544 _result._lengthDelimited.addAll(other._lengthDelimited);
545 }
546 if (!other._group.isEmpty()) {
547 if (_result._group == null) {
548 _result._group = new List<UnknownFieldSet>();
549 }
550 _result._group.addAll(other._group);
551 }
552 return this;
553 }
554 }
OLDNEW
« no previous file with comments | « lib/protobuf/runtime/Protobuf_client.dart ('k') | lib/protobuf/runtime/WireFormat.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698