OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 dart.pkg.collection.priority_queue; | 5 library dart.pkg.collection.priority_queue; |
6 | 6 |
7 import "dart:collection" show SplayTreeSet; | 7 import "dart:collection" show SplayTreeSet; |
8 | 8 |
9 /** | 9 /** |
10 * A priority queue is a priority based work-list of elements. | 10 * A priority queue is a priority based work-list of elements. |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 _bubbleUp(element, _length++); | 268 _bubbleUp(element, _length++); |
269 } | 269 } |
270 | 270 |
271 /** | 271 /** |
272 * Find the index of an object in the heap. | 272 * Find the index of an object in the heap. |
273 * | 273 * |
274 * Returns -1 if the object is not found. | 274 * Returns -1 if the object is not found. |
275 */ | 275 */ |
276 int _locate(E object) { | 276 int _locate(E object) { |
277 if (_length == 0) return -1; | 277 if (_length == 0) return -1; |
278 // Count positions from one instad of zero. This gives the numbers | 278 // Count positions from one instead of zero. This gives the numbers |
279 // some nice properties. For example, all right children are odd, | 279 // some nice properties. For example, all right children are odd, |
280 // their left sibling is even, and the parent is found by shifting | 280 // their left sibling is even, and the parent is found by shifting |
281 // right by one. | 281 // right by one. |
282 // Valid range for position is [1.._length], inclusive. | 282 // Valid range for position is [1.._length], inclusive. |
283 int position = 1; | 283 int position = 1; |
284 // Pre-order depth first search, omit child nodes if the current | 284 // Pre-order depth first search, omit child nodes if the current |
285 // node has lower priority than [object], because all nodes lower | 285 // node has lower priority than [object], because all nodes lower |
286 // in the heap will also have lower priority. | 286 // in the heap will also have lower priority. |
287 do { | 287 do { |
288 int index = position - 1; | 288 int index = position - 1; |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 * Called when the list is full. | 387 * Called when the list is full. |
388 */ | 388 */ |
389 void _grow() { | 389 void _grow() { |
390 int newCapacity = _queue.length * 2 + 1; | 390 int newCapacity = _queue.length * 2 + 1; |
391 if (newCapacity < _INITIAL_CAPACITY) newCapacity = _INITIAL_CAPACITY; | 391 if (newCapacity < _INITIAL_CAPACITY) newCapacity = _INITIAL_CAPACITY; |
392 List<E> newQueue = new List<E>(newCapacity); | 392 List<E> newQueue = new List<E>(newCapacity); |
393 newQueue.setRange(0, _length, _queue); | 393 newQueue.setRange(0, _length, _queue); |
394 _queue = newQueue; | 394 _queue = newQueue; |
395 } | 395 } |
396 } | 396 } |
OLD | NEW |