File tree Expand file tree Collapse file tree 1 file changed +9
-10
lines changed Expand file tree Collapse file tree 1 file changed +9
-10
lines changed Original file line number Diff line number Diff line change @@ -10,23 +10,16 @@ sub hash(*%new) {
10
10
sub sorted_keys ($ hash ) {
11
11
my @ keys := nqp ::list_s();
12
12
13
+ # not empty
13
14
if nqp :: elems ($ hash ) -> int $ count {
14
15
my $ iter := nqp :: iterator ($ hash );
15
16
nqp ::while (
16
17
$ iter ,
17
18
nqp ::push_s(@ keys ,nqp ::iterkey_s(nqp :: shift ($ iter )))
18
19
);
19
20
20
- if $ count == 1 {
21
- # all ok already
22
- }
23
- elsif $ count == 2 {
24
- # swap if necessary
25
- if nqp ::atpos_s(@ keys , 0 ) gt nqp ::atpos_s(@ keys , 1 ) {
26
- nqp ::push_s(@ keys , nqp ::shift_s(@ keys ));
27
- }
28
- }
29
- else {
21
+ # need to do actual sorting
22
+ if $ count > 2 {
30
23
# need to do actual sorting
31
24
sub sift_down (@ a , int $ start , int $ end ) {
32
25
my int $ root := $ start ;
@@ -68,6 +61,12 @@ sub sorted_keys($hash) {
68
61
sift_down(@ keys , 0 , $ end );
69
62
}
70
63
}
64
+ # swap if necessary
65
+ else {
66
+ nqp ::push_s(@ keys , nqp ::shift_s(@ keys ))
67
+ if $ count == 2
68
+ && nqp ::atpos_s(@ keys , 0 ) gt nqp ::atpos_s(@ keys , 1 );
69
+ }
71
70
}
72
71
73
72
@ keys
You can’t perform that action at this time.
0 commit comments