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

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

Issue 1879373004: Implement modular compilation (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 8 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
(Empty)
1 dart_library.library('collection/src/algorithms', null, /* Imports */[
2 'dart/_runtime',
3 'collection/src/utils',
4 'dart/core',
5 'dart/math'
6 ], /* Lazy imports */[
7 ], function(exports, dart, utils, core, math) {
8 'use strict';
9 let dartx = dart.dartx;
10 function binarySearch(sortedList, value, opts) {
11 let compare = opts && 'compare' in opts ? opts.compare : null;
12 let t = compare;
13 t == null ? compare = utils.defaultCompare() : t;
14 let min = 0;
15 let max = sortedList[dartx.length];
16 while (min < dart.notNull(max)) {
17 let mid = min + (dart.notNull(max) - min >> 1);
18 let element = sortedList[dartx.get](mid);
19 let comp = compare(element, value);
20 if (comp == 0) return mid;
21 if (dart.notNull(comp) < 0) {
22 min = mid + 1;
23 } else {
24 max = mid;
25 }
26 }
27 return -1;
28 }
29 dart.fn(binarySearch, () => dart.definiteFunctionType(core.int, [core.List, da rt.dynamic], {compare: dart.functionType(core.int, [dart.dynamic, dart.dynamic]) }));
30 function lowerBound(sortedList, value, opts) {
31 let compare = opts && 'compare' in opts ? opts.compare : null;
32 let t = compare;
33 t == null ? compare = utils.defaultCompare() : t;
34 let min = 0;
35 let max = sortedList[dartx.length];
36 while (min < dart.notNull(max)) {
37 let mid = min + (dart.notNull(max) - min >> 1);
38 let element = sortedList[dartx.get](mid);
39 let comp = compare(element, value);
40 if (dart.notNull(comp) < 0) {
41 min = mid + 1;
42 } else {
43 max = mid;
44 }
45 }
46 return min;
47 }
48 dart.fn(lowerBound, () => dart.definiteFunctionType(core.int, [core.List, dart .dynamic], {compare: dart.functionType(core.int, [dart.dynamic, dart.dynamic])}) );
49 function shuffle(list, start, end) {
50 if (start === void 0) start = 0;
51 if (end === void 0) end = null;
52 let random = math.Random.new();
53 if (end == null) end = list[dartx.length];
54 let length = dart.notNull(end) - dart.notNull(start);
55 while (length > 1) {
56 let pos = random.nextInt(length);
57 length--;
58 let tmp1 = list[dartx.get](dart.notNull(start) + dart.notNull(pos));
59 list[dartx.set](dart.notNull(start) + dart.notNull(pos), list[dartx.get](d art.notNull(start) + length));
60 list[dartx.set](dart.notNull(start) + length, tmp1);
61 }
62 }
63 dart.fn(shuffle, dart.void, [core.List], [core.int, core.int]);
64 function reverse(list, start, end) {
65 if (start === void 0) start = 0;
66 if (end === void 0) end = null;
67 if (end == null) end = list[dartx.length];
68 _reverse(list, start, end);
69 }
70 dart.fn(reverse, dart.void, [core.List], [core.int, core.int]);
71 function _reverse(list, start, end) {
72 for (let i = start, j = dart.notNull(end) - 1; dart.notNull(i) < j; i = dart .notNull(i) + 1, j--) {
73 let tmp = list[dartx.get](i);
74 list[dartx.set](i, list[dartx.get](j));
75 list[dartx.set](j, tmp);
76 }
77 }
78 dart.fn(_reverse, dart.void, [core.List, core.int, core.int]);
79 function insertionSort(list, opts) {
80 let compare = opts && 'compare' in opts ? opts.compare : null;
81 let start = opts && 'start' in opts ? opts.start : 0;
82 let end = opts && 'end' in opts ? opts.end : null;
83 let t = compare;
84 t == null ? compare = utils.defaultCompare() : t;
85 let t$ = end;
86 t$ == null ? end = list[dartx.length] : t$;
87 for (let pos = dart.notNull(start) + 1; pos < dart.notNull(end); pos++) {
88 let min = start;
89 let max = pos;
90 let element = list[dartx.get](pos);
91 while (dart.notNull(min) < max) {
92 let mid = dart.notNull(min) + (max - dart.notNull(min) >> 1);
93 let comparison = compare(element, list[dartx.get](mid));
94 if (dart.notNull(comparison) < 0) {
95 max = mid;
96 } else {
97 min = mid + 1;
98 }
99 }
100 list[dartx.setRange](dart.notNull(min) + 1, pos + 1, list, min);
101 list[dartx.set](min, element);
102 }
103 }
104 dart.fn(insertionSort, () => dart.definiteFunctionType(dart.void, [core.List], {compare: dart.functionType(core.int, [dart.dynamic, dart.dynamic]), start: cor e.int, end: core.int}));
105 const _MERGE_SORT_LIMIT = 32;
106 function mergeSort(list, opts) {
107 let start = opts && 'start' in opts ? opts.start : 0;
108 let end = opts && 'end' in opts ? opts.end : null;
109 let compare = opts && 'compare' in opts ? opts.compare : null;
110 let t = end;
111 t == null ? end = list[dartx.length] : t;
112 let t$ = compare;
113 t$ == null ? compare = utils.defaultCompare() : t$;
114 let length = dart.notNull(end) - dart.notNull(start);
115 if (length < 2) return;
116 if (length < dart.notNull(_MERGE_SORT_LIMIT)) {
117 insertionSort(list, {compare: compare, start: start, end: end});
118 return;
119 }
120 let middle = dart.notNull(start) + (dart.notNull(end) - dart.notNull(start) >> 1);
121 let firstLength = middle - dart.notNull(start);
122 let secondLength = dart.notNull(end) - middle;
123 let scratchSpace = core.List.new(secondLength);
124 _mergeSort(list, compare, middle, end, scratchSpace, 0);
125 let firstTarget = dart.notNull(end) - firstLength;
126 _mergeSort(list, compare, start, middle, list, firstTarget);
127 _merge(compare, list, firstTarget, end, scratchSpace, 0, secondLength, list, start);
128 }
129 dart.fn(mergeSort, () => dart.definiteFunctionType(dart.void, [core.List], {st art: core.int, end: core.int, compare: dart.functionType(core.int, [dart.dynamic , dart.dynamic])}));
130 function _movingInsertionSort(list, compare, start, end, target, targetOffset) {
131 let length = dart.notNull(end) - dart.notNull(start);
132 if (length == 0) return;
133 target[dartx.set](targetOffset, list[dartx.get](start));
134 for (let i = 1; i < length; i++) {
135 let element = list[dartx.get](dart.notNull(start) + i);
136 let min = targetOffset;
137 let max = dart.notNull(targetOffset) + i;
138 while (dart.notNull(min) < max) {
139 let mid = dart.notNull(min) + (max - dart.notNull(min) >> 1);
140 if (dart.notNull(compare(element, target[dartx.get](mid))) < 0) {
141 max = mid;
142 } else {
143 min = mid + 1;
144 }
145 }
146 target[dartx.setRange](dart.notNull(min) + 1, dart.notNull(targetOffset) + i + 1, target, min);
147 target[dartx.set](min, element);
148 }
149 }
150 dart.fn(_movingInsertionSort, () => dart.definiteFunctionType(dart.void, [core .List, dart.functionType(core.int, [dart.dynamic, dart.dynamic]), core.int, core .int, core.List, core.int]));
151 function _mergeSort(list, compare, start, end, target, targetOffset) {
152 let length = dart.notNull(end) - dart.notNull(start);
153 if (length < dart.notNull(_MERGE_SORT_LIMIT)) {
154 _movingInsertionSort(list, compare, start, end, target, targetOffset);
155 return;
156 }
157 let middle = dart.notNull(start) + (length >> 1);
158 let firstLength = middle - dart.notNull(start);
159 let secondLength = dart.notNull(end) - middle;
160 let targetMiddle = dart.notNull(targetOffset) + firstLength;
161 _mergeSort(list, compare, middle, end, target, targetMiddle);
162 _mergeSort(list, compare, start, middle, list, middle);
163 _merge(compare, list, middle, middle + firstLength, target, targetMiddle, ta rgetMiddle + secondLength, target, targetOffset);
164 }
165 dart.fn(_mergeSort, () => dart.definiteFunctionType(dart.void, [core.List, dar t.functionType(core.int, [dart.dynamic, dart.dynamic]), core.int, core.int, core .List, core.int]));
166 function _merge(compare, firstList, firstStart, firstEnd, secondList, secondSt art, secondEnd, target, targetOffset) {
167 dart.assert(dart.notNull(firstStart) < dart.notNull(firstEnd));
168 dart.assert(dart.notNull(secondStart) < dart.notNull(secondEnd));
169 let cursor1 = firstStart;
170 let cursor2 = secondStart;
171 let firstElement = firstList[dartx.get]((() => {
172 let x = cursor1;
173 cursor1 = dart.notNull(x) + 1;
174 return x;
175 })());
176 let secondElement = secondList[dartx.get]((() => {
177 let x = cursor2;
178 cursor2 = dart.notNull(x) + 1;
179 return x;
180 })());
181 while (true) {
182 if (dart.notNull(compare(firstElement, secondElement)) <= 0) {
183 target[dartx.set]((() => {
184 let x = targetOffset;
185 targetOffset = dart.notNull(x) + 1;
186 return x;
187 })(), firstElement);
188 if (cursor1 == firstEnd) break;
189 firstElement = firstList[dartx.get]((() => {
190 let x = cursor1;
191 cursor1 = dart.notNull(x) + 1;
192 return x;
193 })());
194 } else {
195 target[dartx.set]((() => {
196 let x = targetOffset;
197 targetOffset = dart.notNull(x) + 1;
198 return x;
199 })(), secondElement);
200 if (cursor2 != secondEnd) {
201 secondElement = secondList[dartx.get]((() => {
202 let x = cursor2;
203 cursor2 = dart.notNull(x) + 1;
204 return x;
205 })());
206 continue;
207 }
208 target[dartx.set]((() => {
209 let x = targetOffset;
210 targetOffset = dart.notNull(x) + 1;
211 return x;
212 })(), firstElement);
213 target[dartx.setRange](targetOffset, dart.notNull(targetOffset) + (dart. notNull(firstEnd) - dart.notNull(cursor1)), firstList, cursor1);
214 return;
215 }
216 }
217 target[dartx.set]((() => {
218 let x = targetOffset;
219 targetOffset = dart.notNull(x) + 1;
220 return x;
221 })(), secondElement);
222 target[dartx.setRange](targetOffset, dart.notNull(targetOffset) + (dart.notN ull(secondEnd) - dart.notNull(cursor2)), secondList, cursor2);
223 }
224 dart.fn(_merge, () => dart.definiteFunctionType(dart.void, [dart.functionType( core.int, [dart.dynamic, dart.dynamic]), core.List, core.int, core.int, core.Lis t, core.int, core.int, core.List, core.int]));
225 // Exports:
226 exports.binarySearch = binarySearch;
227 exports.lowerBound = lowerBound;
228 exports.shuffle = shuffle;
229 exports.reverse = reverse;
230 exports.insertionSort = insertionSort;
231 exports.mergeSort = mergeSort;
232 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698