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

Side by Side Diff: pkg/analyzer/lib/src/summary/flat_buffers.dart

Issue 1579663002: Cache values of fields and lists in summary implementations. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.src.summary.flat_buffers; 5 library analyzer.src.summary.flat_buffers;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:math'; 9 import 'dart:math';
10 import 'dart:typed_data'; 10 import 'dart:typed_data';
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 BufferPointer object = ref.derefObject(); 494 BufferPointer object = ref.derefObject();
495 int length = object._getUint32(); 495 int length = object._getUint32();
496 return UTF8 496 return UTF8
497 .decode(ref._buffer.buffer.asUint8List(object._offset + 4, length)); 497 .decode(ref._buffer.buffer.asUint8List(object._offset + 4, length));
498 } 498 }
499 } 499 }
500 500
501 /** 501 /**
502 * An abstract reader for tables. 502 * An abstract reader for tables.
503 */ 503 */
504 abstract class TableReader<T extends TableReader<T>> extends Reader<T> { 504 abstract class TableReader<T> extends Reader<T> {
505 const TableReader(); 505 const TableReader();
506 506
507 @override 507 @override
508 int get size => 4; 508 int get size => 4;
509 509
510 /** 510 /**
511 * Return the [Reader] for reading fields of the object at [bp]. 511 * Return the object at [bp].
512 */ 512 */
513 T createReader(BufferPointer bp); 513 T createObject(BufferPointer bp);
514 514
515 @override 515 @override
516 T read(BufferPointer bp) { 516 T read(BufferPointer bp) {
517 bp = bp.derefObject(); 517 bp = bp.derefObject();
518 return createReader(bp); 518 return createObject(bp);
519 } 519 }
520 } 520 }
521 521
522 class _FbList<E> extends Object with ListMixin<E> implements List<E> { 522 class _FbList<E> extends Object with ListMixin<E> implements List<E> {
523 final Reader<E> elementReader; 523 final Reader<E> elementReader;
524 final BufferPointer bp; 524 final BufferPointer bp;
525 List<E> cache;
525 526
526 _FbList(this.elementReader, this.bp); 527 _FbList(this.elementReader, this.bp);
527 528
528 @override 529 @override
529 int get length => bp._getUint32(); 530 int get length => bp._getUint32();
530 531
531 @override 532 @override
532 void set length(int i) => 533 void set length(int i) =>
533 throw new StateError('Attempt to modify immutable list'); 534 throw new StateError('Attempt to modify immutable list');
534 535
535 @override 536 @override
536 E operator [](int i) { 537 E operator [](int i) {
537 BufferPointer ref = bp._advance(4 + elementReader.size * i); 538 cache ??= new List<E>(length);
538 return elementReader.read(ref); 539 E item = cache[i];
540 if (item == null) {
541 BufferPointer ref = bp._advance(4 + elementReader.size * i);
542 item = elementReader.read(ref);
543 cache[i] = item;
544 }
545 return item;
539 } 546 }
540 547
541 @override 548 @override
542 void operator []=(int i, E e) => 549 void operator []=(int i, E e) =>
543 throw new StateError('Attempt to modify immutable list'); 550 throw new StateError('Attempt to modify immutable list');
544 } 551 }
545 552
546 /** 553 /**
547 * Class that describes the structure of a table. 554 * Class that describes the structure of a table.
548 */ 555 */
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 // Table size. 617 // Table size.
611 buf.setUint16(bufOffset, tableSize, Endianness.LITTLE_ENDIAN); 618 buf.setUint16(bufOffset, tableSize, Endianness.LITTLE_ENDIAN);
612 bufOffset += 2; 619 bufOffset += 2;
613 // Field offsets. 620 // Field offsets.
614 for (int fieldOffset in fieldOffsets) { 621 for (int fieldOffset in fieldOffsets) {
615 buf.setUint16(bufOffset, fieldOffset, Endianness.LITTLE_ENDIAN); 622 buf.setUint16(bufOffset, fieldOffset, Endianness.LITTLE_ENDIAN);
616 bufOffset += 2; 623 bufOffset += 2;
617 } 624 }
618 } 625 }
619 } 626 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/format.dart » ('j') | pkg/analyzer/lib/src/summary/resynthesize.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698