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

Side by Side Diff: test/codegen/expect/collection/src/queue_list.js

Issue 1724463003: refactor: avoid parts (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « lib/src/codegen/js_typeref_codegen.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 dart_library.library('collection/src/queue_list', null, /* Imports */[
2 'dart/_runtime',
3 'dart/core',
4 'dart/collection'
5 ], /* Lazy imports */[
6 ], function(exports, dart, core, collection) {
7 'use strict';
8 let dartx = dart.dartx;
9 const _head = Symbol('_head');
10 const _tail = Symbol('_tail');
11 const _table = Symbol('_table');
12 const _add = Symbol('_add');
13 const _preGrow = Symbol('_preGrow');
14 const _grow = Symbol('_grow');
15 const _writeToList = Symbol('_writeToList');
16 const QueueList$ = dart.generic(function(E) {
17 class QueueList extends dart.mixin(core.Object, collection.ListMixin$(E)) {
18 QueueList(initialCapacity) {
19 if (initialCapacity === void 0) initialCapacity = null;
20 this[_head] = 0;
21 this[_tail] = 0;
22 this[_table] = null;
23 if (initialCapacity == null || dart.notNull(initialCapacity) < dart.notN ull(QueueList$()._INITIAL_CAPACITY)) {
24 initialCapacity = QueueList$()._INITIAL_CAPACITY;
25 } else if (!dart.notNull(QueueList$()._isPowerOf2(initialCapacity))) {
26 initialCapacity = QueueList$()._nextPowerOf2(initialCapacity);
27 }
28 dart.assert(QueueList$()._isPowerOf2(initialCapacity));
29 this[_table] = core.List$(E).new(initialCapacity);
30 }
31 static from(source) {
32 if (dart.is(source, core.List)) {
33 let length = source[dartx.length];
34 let queue = new (QueueList$(E))(dart.notNull(length) + 1);
35 dart.assert(dart.notNull(queue[_table][dartx.length]) > dart.notNull(l ength));
36 let sourceList = dart.as(source, core.List);
37 queue[_table][dartx.setRange](0, length, dart.as(sourceList, core.Iter able$(E)), 0);
38 queue[_tail] = length;
39 return queue;
40 } else {
41 let _ = new (QueueList$(E))();
42 _.addAll(source);
43 return _;
44 }
45 }
46 add(element) {
47 dart.as(element, E);
48 this[_add](element);
49 }
50 addAll(elements) {
51 dart.as(elements, core.Iterable$(E));
52 if (dart.is(elements, core.List)) {
53 let list = dart.as(elements, core.List);
54 let addCount = list[dartx.length];
55 let length = this.length;
56 if (dart.notNull(length) + dart.notNull(addCount) >= dart.notNull(this [_table][dartx.length])) {
57 this[_preGrow](dart.notNull(length) + dart.notNull(addCount));
58 this[_table][dartx.setRange](length, dart.notNull(length) + dart.not Null(addCount), dart.as(list, core.Iterable$(E)), 0);
59 this[_tail] = dart.notNull(this[_tail]) + dart.notNull(addCount);
60 } else {
61 let endSpace = dart.notNull(this[_table][dartx.length]) - dart.notNu ll(this[_tail]);
62 if (dart.notNull(addCount) < endSpace) {
63 this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail] ) + dart.notNull(addCount), dart.as(list, core.Iterable$(E)), 0);
64 this[_tail] = dart.notNull(this[_tail]) + dart.notNull(addCount);
65 } else {
66 let preSpace = dart.notNull(addCount) - endSpace;
67 this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail] ) + endSpace, dart.as(list, core.Iterable$(E)), 0);
68 this[_table][dartx.setRange](0, preSpace, dart.as(list, core.Itera ble$(E)), endSpace);
69 this[_tail] = preSpace;
70 }
71 }
72 } else {
73 for (let element of elements)
74 this[_add](element);
75 }
76 }
77 toString() {
78 return collection.IterableBase.iterableToFullString(this, "{", "}");
79 }
80 addLast(element) {
81 dart.as(element, E);
82 this[_add](element);
83 }
84 addFirst(element) {
85 dart.as(element, E);
86 this[_head] = dart.notNull(this[_head]) - 1 & dart.notNull(this[_table][ dartx.length]) - 1;
87 this[_table][dartx.set](this[_head], element);
88 if (this[_head] == this[_tail]) this[_grow]();
89 }
90 removeFirst() {
91 if (this[_head] == this[_tail]) dart.throw(new core.StateError("No eleme nt"));
92 let result = this[_table][dartx.get](this[_head]);
93 this[_table][dartx.set](this[_head], null);
94 this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(this[_table][ dartx.length]) - 1;
95 return result;
96 }
97 removeLast() {
98 if (this[_head] == this[_tail]) dart.throw(new core.StateError("No eleme nt"));
99 this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(this[_table][ dartx.length]) - 1;
100 let result = this[_table][dartx.get](this[_tail]);
101 this[_table][dartx.set](this[_tail], null);
102 return result;
103 }
104 get length() {
105 return dart.notNull(this[_tail]) - dart.notNull(this[_head]) & dart.notN ull(this[_table][dartx.length]) - 1;
106 }
107 set length(value) {
108 if (dart.notNull(value) < 0) dart.throw(new core.RangeError(`Length ${va lue} may not be negative.`));
109 let delta = dart.notNull(value) - dart.notNull(this.length);
110 if (delta >= 0) {
111 if (dart.notNull(this[_table][dartx.length]) <= dart.notNull(value)) {
112 this[_preGrow](value);
113 }
114 this[_tail] = dart.notNull(this[_tail]) + delta & dart.notNull(this[_t able][dartx.length]) - 1;
115 return;
116 }
117 let newTail = dart.notNull(this[_tail]) + delta;
118 if (dart.notNull(newTail) >= 0) {
119 this[_table][dartx.fillRange](newTail, this[_tail], null);
120 } else {
121 newTail = dart.notNull(newTail) + dart.notNull(this[_table][dartx.leng th]);
122 this[_table][dartx.fillRange](0, this[_tail], null);
123 this[_table][dartx.fillRange](newTail, this[_table][dartx.length], nul l);
124 }
125 this[_tail] = newTail;
126 }
127 get(index) {
128 if (dart.notNull(index) < 0 || dart.notNull(index) >= dart.notNull(this. length)) {
129 dart.throw(new core.RangeError(`Index ${index} must be in the range [0 ..${this.length}).`));
130 }
131 return this[_table][dartx.get](dart.notNull(this[_head]) + dart.notNull( index) & dart.notNull(this[_table][dartx.length]) - 1);
132 }
133 set(index, value) {
134 dart.as(value, E);
135 if (dart.notNull(index) < 0 || dart.notNull(index) >= dart.notNull(this. length)) {
136 dart.throw(new core.RangeError(`Index ${index} must be in the range [0 ..${this.length}).`));
137 }
138 this[_table][dartx.set](dart.notNull(this[_head]) + dart.notNull(index) & dart.notNull(this[_table][dartx.length]) - 1, value);
139 return value;
140 }
141 static _isPowerOf2(number) {
142 return (dart.notNull(number) & dart.notNull(number) - 1) == 0;
143 }
144 static _nextPowerOf2(number) {
145 dart.assert(dart.notNull(number) > 0);
146 number = (dart.notNull(number) << 1) - 1;
147 for (;;) {
148 let nextNumber = dart.notNull(number) & dart.notNull(number) - 1;
149 if (nextNumber == 0) return number;
150 number = nextNumber;
151 }
152 }
153 [_add](element) {
154 dart.as(element, E);
155 this[_table][dartx.set](this[_tail], element);
156 this[_tail] = dart.notNull(this[_tail]) + 1 & dart.notNull(this[_table][ dartx.length]) - 1;
157 if (this[_head] == this[_tail]) this[_grow]();
158 }
159 [_grow]() {
160 let newTable = core.List$(E).new(dart.notNull(this[_table][dartx.length] ) * 2);
161 let split = dart.notNull(this[_table][dartx.length]) - dart.notNull(this [_head]);
162 newTable[dartx.setRange](0, split, this[_table], this[_head]);
163 newTable[dartx.setRange](split, split + dart.notNull(this[_head]), this[ _table], 0);
164 this[_head] = 0;
165 this[_tail] = this[_table][dartx.length];
166 this[_table] = newTable;
167 }
168 [_writeToList](target) {
169 dart.as(target, core.List$(E));
170 dart.assert(dart.notNull(target[dartx.length]) >= dart.notNull(this.leng th));
171 if (dart.notNull(this[_head]) <= dart.notNull(this[_tail])) {
172 let length = dart.notNull(this[_tail]) - dart.notNull(this[_head]);
173 target[dartx.setRange](0, length, this[_table], this[_head]);
174 return length;
175 } else {
176 let firstPartSize = dart.notNull(this[_table][dartx.length]) - dart.no tNull(this[_head]);
177 target[dartx.setRange](0, firstPartSize, this[_table], this[_head]);
178 target[dartx.setRange](firstPartSize, firstPartSize + dart.notNull(thi s[_tail]), this[_table], 0);
179 return dart.notNull(this[_tail]) + firstPartSize;
180 }
181 }
182 [_preGrow](newElementCount) {
183 dart.assert(dart.notNull(newElementCount) >= dart.notNull(this.length));
184 newElementCount = dart.notNull(newElementCount) + (dart.notNull(newEleme ntCount) >> 1);
185 let newCapacity = QueueList$()._nextPowerOf2(newElementCount);
186 let newTable = core.List$(E).new(newCapacity);
187 this[_tail] = this[_writeToList](newTable);
188 this[_table] = newTable;
189 this[_head] = 0;
190 }
191 }
192 QueueList[dart.implements] = () => [collection.Queue$(E)];
193 dart.setSignature(QueueList, {
194 constructors: () => ({
195 QueueList: [QueueList$(E), [], [core.int]],
196 from: [QueueList$(E), [core.Iterable$(E)]]
197 }),
198 methods: () => ({
199 add: [dart.void, [E]],
200 addAll: [dart.void, [core.Iterable$(E)]],
201 addLast: [dart.void, [E]],
202 addFirst: [dart.void, [E]],
203 removeFirst: [E, []],
204 removeLast: [E, []],
205 get: [E, [core.int]],
206 set: [dart.void, [core.int, E]],
207 [_add]: [dart.void, [E]],
208 [_grow]: [dart.void, []],
209 [_writeToList]: [core.int, [core.List$(E)]],
210 [_preGrow]: [dart.void, [core.int]]
211 }),
212 statics: () => ({
213 _isPowerOf2: [core.bool, [core.int]],
214 _nextPowerOf2: [core.int, [core.int]]
215 }),
216 names: ['_isPowerOf2', '_nextPowerOf2']
217 });
218 dart.defineExtensionMembers(QueueList, [
219 'add',
220 'addAll',
221 'toString',
222 'removeLast',
223 'get',
224 'set',
225 'length',
226 'length'
227 ]);
228 QueueList._INITIAL_CAPACITY = 8;
229 return QueueList;
230 });
231 let QueueList = QueueList$();
232 // Exports:
233 exports.QueueList$ = QueueList$;
234 exports.QueueList = QueueList;
235 });
OLDNEW
« no previous file with comments | « lib/src/codegen/js_typeref_codegen.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698