@@ -76,6 +76,21 @@ impl <T: Copy Ord> PriorityQueue<T> {
76
76
ret
77
77
}
78
78
79
+ /// Consume the PriorityQueue and return the underlying vector
80
+ pure fn to_vec ( self ) -> ~[ T ] { let PriorityQueue { data : v} = self ; v }
81
+
82
+ /// Consume the PriorityQueue and return a vector in sorted (ascending) order
83
+ pure fn to_sorted_vec ( self ) -> ~[ T ] {
84
+ let mut q = self ;
85
+ let mut end = q. len ( ) - 1 ;
86
+ while end > 0 {
87
+ q. data [ end] <-> q. data [ 0 ] ;
88
+ end -= 1 ;
89
+ unsafe { q. siftup_range ( 0 , end) } // purity-checking workaround
90
+ }
91
+ q. to_vec ( )
92
+ }
93
+
79
94
priv fn siftdown ( & mut self , startpos : uint , pos : uint ) {
80
95
let mut pos = pos;
81
96
let newitem = self . data [ pos] ;
@@ -118,24 +133,6 @@ impl <T: Copy Ord> PriorityQueue<T> {
118
133
}
119
134
}
120
135
121
- /// Consume the PriorityQueue and return the underlying vector
122
- pub pure fn to_vec < T : Copy Ord > ( q : PriorityQueue < T > ) -> ~[ T ] {
123
- let PriorityQueue { data : v} = q;
124
- v
125
- }
126
-
127
- /// Consume the PriorityQueue and return a vector in sorted (ascending) order
128
- pub pure fn to_sorted_vec < T : Copy Ord > ( q : PriorityQueue < T > ) -> ~[ T ] {
129
- let mut q = q;
130
- let mut end = q. len ( ) - 1 ;
131
- while end > 0 {
132
- q. data [ end] <-> q. data [ 0 ] ;
133
- end -= 1 ;
134
- unsafe { q. siftup_range ( 0 , end) } // purity-checking workaround
135
- }
136
- to_vec ( q)
137
- }
138
-
139
136
pub pure fn from_vec < T : Copy Ord > ( xs : ~[ T ] ) -> PriorityQueue < T > {
140
137
let mut q = PriorityQueue { data : xs, } ;
141
138
let mut n = q. len ( ) / 2 ;
@@ -215,7 +212,7 @@ mod tests {
215
212
#[ test]
216
213
fn test_to_sorted_vec ( ) {
217
214
let data = ~[ 2 , 4 , 6 , 2 , 1 , 8 , 10 , 3 , 5 , 7 , 0 , 9 , 1 ] ;
218
- assert to_sorted_vec ( from_vec ( data) ) == merge_sort ( data, le) ;
215
+ assert from_vec( data) . to_sorted_vec ( ) == merge_sort ( data, le) ;
219
216
}
220
217
221
218
#[ test]
@@ -248,6 +245,6 @@ mod tests {
248
245
fn test_to_vec ( ) {
249
246
let data = ~[ 1 , 3 , 5 , 7 , 9 , 2 , 4 , 6 , 8 , 0 ] ;
250
247
let heap = from_vec ( copy data) ;
251
- assert merge_sort( to_vec ( heap ) , le) == merge_sort ( data, le) ;
248
+ assert merge_sort( heap . to_vec ( ) , le) == merge_sort ( data, le) ;
252
249
}
253
250
}
0 commit comments