@@ -22,40 +22,61 @@ pub struct Deque<T> {
2222}
2323
2424impl < T > Container for Deque < T > {
25+ /// Return the number of elements in the deque
2526 pure fn len ( & self ) -> uint { self . nelts }
27+
28+ /// Return true if the deque contains no elements
2629 pure fn is_empty ( & self ) -> bool { self . len ( ) == 0 }
2730}
2831
2932impl < T > Mutable for Deque < T > {
33+ /// Clear the deque, removing all values.
3034 fn clear ( & mut self ) {
31- for vec :: each_mut ( self . elts) |x| { * x = None }
35+ for self . elts. each_mut |x| { * x = None }
3236 self . nelts = 0 ;
3337 self . lo = 0 ;
3438 self . hi = 0 ;
3539 }
3640}
3741
3842pub impl < T > Deque < T > {
43+ /// Create an empty Deque
3944 static pure fn new( ) -> Deque <T > {
4045 Deque { nelts: 0 , lo: 0 , hi: 0 ,
4146 elts: vec:: from_fn( initial_capacity, |_| None ) }
4247 }
4348
49+ /// Return a reference to the first element in the deque
50+ ///
51+ /// Fails if the deque is empty
4452 fn peek_front ( & self ) -> & self /T { get ( self . elts , self . lo ) }
53+
54+ /// Return a reference to the last element in the deque
55+ ///
56+ /// Fails if the deque is empty
4557 fn peek_back ( & self ) -> & self /T { get ( self . elts , self . hi - 1 u) }
4658
59+ /// Retrieve an element in the deque by index
60+ ///
61+ /// Fails if there is no element with the given index
4762 fn get ( & self , i : int ) -> & self /T {
4863 let idx = ( self . lo + ( i as uint ) ) % self . elts . len ( ) ;
4964 get ( self . elts , idx)
5065 }
5166
67+ /// Remove and return the first element in the deque
68+ ///
69+ /// Fails if the deque is empty
5270 fn pop_front ( & mut self ) -> T {
5371 let mut result = self . elts [ self . lo ] . swap_unwrap ( ) ;
5472 self . lo = ( self . lo + 1 u) % self . elts . len ( ) ;
5573 self . nelts -= 1 u;
5674 result
5775 }
5876
77+ /// Remove and return the last element in the deque
78+ ///
79+ /// Fails if the deque is empty
5980 fn pop_back ( & mut self ) -> T {
6081 if self . hi == 0 u {
6182 self . hi = self . elts . len ( ) - 1 u;
@@ -66,6 +87,7 @@ pub impl<T> Deque<T> {
6687 result
6788 }
6889
90+ /// Prepend an element to the deque
6991 fn add_front ( & mut self , t : T ) {
7092 let oldlo = self . lo ;
7193 if self . lo == 0 u {
@@ -80,6 +102,7 @@ pub impl<T> Deque<T> {
80102 self . nelts += 1 u;
81103 }
82104
105+ /// Append an element to the deque
83106 fn add_back ( & mut self , t : T ) {
84107 if self . lo == self . hi && self . nelts != 0 u {
85108 self . elts = grow ( self . nelts , self . lo , self . elts ) ;
0 commit comments