@@ -9,7 +9,9 @@ function TinyQueue(data, compare) {
99 this . length = this . data . length ;
1010 this . compare = compare || defaultCompare ;
1111
12- if ( data ) for ( var i = Math . floor ( this . length / 2 ) ; i >= 0 ; i -- ) this . _down ( i ) ;
12+ if ( data ) {
13+ for ( var i = ( this . length >> 1 ) ; i >= 0 ; i -- ) this . _down ( i ) ;
14+ }
1315}
1416
1517function defaultCompare ( a , b ) {
@@ -38,42 +40,43 @@ TinyQueue.prototype = {
3840 } ,
3941
4042 _up : function ( pos ) {
41- var data = this . data ,
42- compare = this . compare ;
43+ var data = this . data ;
44+ var compare = this . compare ;
45+ var item = data [ pos ] ;
4346
4447 while ( pos > 0 ) {
45- var parent = Math . floor ( ( pos - 1 ) / 2 ) ;
46- if ( compare ( data [ pos ] , data [ parent ] ) < 0 ) {
47- swap ( data , parent , pos ) ;
48- pos = parent ;
49-
50- } else break ;
48+ var parent = ( pos - 1 ) >> 1 ;
49+ var current = data [ parent ] ;
50+ if ( compare ( item , current ) >= 0 ) break ;
51+ data [ pos ] = current ;
52+ pos = parent ;
5153 }
54+
55+ data [ pos ] = item ;
5256 } ,
5357
5458 _down : function ( pos ) {
55- var data = this . data ,
56- compare = this . compare ,
57- len = this . length ;
58-
59- while ( true ) {
60- var left = 2 * pos + 1 ,
61- right = left + 1 ,
62- min = pos ;
63-
64- if ( left < len && compare ( data [ left ] , data [ min ] ) < 0 ) min = left ;
65- if ( right < len && compare ( data [ right ] , data [ min ] ) < 0 ) min = right ;
66-
67- if ( min === pos ) return ;
68-
69- swap ( data , min , pos ) ;
70- pos = min ;
59+ var data = this . data ;
60+ var compare = this . compare ;
61+ var len = this . length ;
62+ var halfLen = len >> 1 ;
63+ var item = data [ pos ] ;
64+
65+ while ( pos < halfLen ) {
66+ var left = ( pos << 1 ) + 1 ;
67+ var right = left + 1 ;
68+ var best = data [ left ] ;
69+
70+ if ( right < len && compare ( data [ right ] , best ) < 0 ) {
71+ left = right ;
72+ best = data [ right ] ;
73+ }
74+ if ( compare ( best , item ) >= 0 ) break ;
75+
76+ data [ pos ] = best ;
77+ pos = left ;
7178 }
79+
80+ data [ pos ] = item ;
7281 }
7382} ;
74-
75- function swap ( data , i , j ) {
76- var tmp = data [ i ] ;
77- data [ i ] = data [ j ] ;
78- data [ j ] = tmp ;
79- }
0 commit comments