@@ -116,7 +116,7 @@ impl<T: ToStr> ToStr for Option<T> {
116
116
impl < T > Option < T > {
117
117
/// Return an iterator over the possibly contained value
118
118
#[ inline]
119
- pub fn iter < ' r > ( & ' r self ) -> OptionIterator < ' r , T > {
119
+ pub fn iter < ' r > ( & ' r self ) -> OptionIterator < & ' r T > {
120
120
match * self {
121
121
Some ( ref x) => OptionIterator { opt : Some ( x) } ,
122
122
None => OptionIterator { opt : None }
@@ -125,13 +125,19 @@ impl<T> Option<T> {
125
125
126
126
/// Return a mutable iterator over the possibly contained value
127
127
#[ inline]
128
- pub fn mut_iter < ' r > ( & ' r mut self ) -> OptionMutIterator < ' r , T > {
128
+ pub fn mut_iter < ' r > ( & ' r mut self ) -> OptionIterator < & ' r mut T > {
129
129
match * self {
130
- Some ( ref mut x) => OptionMutIterator { opt : Some ( x) } ,
131
- None => OptionMutIterator { opt : None }
130
+ Some ( ref mut x) => OptionIterator { opt : Some ( x) } ,
131
+ None => OptionIterator { opt : None }
132
132
}
133
133
}
134
134
135
+ /// Return a consuming iterator over the possibly contained value
136
+ #[ inline]
137
+ pub fn consume_iter ( self ) -> OptionIterator < T > {
138
+ OptionIterator { opt : self }
139
+ }
140
+
135
141
/// Returns true if the option equals `None`
136
142
#[ inline]
137
143
pub fn is_none ( & self ) -> bool {
@@ -404,31 +410,13 @@ impl<T> Zero for Option<T> {
404
410
fn is_zero ( & self ) -> bool { self . is_none ( ) }
405
411
}
406
412
407
- /// Immutable iterator over an `Option<A>`
408
- pub struct OptionIterator < ' self , A > {
409
- priv opt: Option < & ' self A >
410
- }
411
-
412
- impl < ' self , A > Iterator < & ' self A > for OptionIterator < ' self , A > {
413
- fn next ( & mut self ) -> Option < & ' self A > {
414
- util:: replace ( & mut self . opt , None )
415
- }
416
-
417
- fn size_hint ( & self ) -> ( uint , Option < uint > ) {
418
- match self . opt {
419
- Some ( _) => ( 1 , Some ( 1 ) ) ,
420
- None => ( 0 , Some ( 0 ) ) ,
421
- }
422
- }
423
- }
424
-
425
- /// Mutable iterator over an `Option<A>`
426
- pub struct OptionMutIterator < ' self , A > {
427
- priv opt: Option < & ' self mut A >
413
+ /// Immutable iterator over an Option
414
+ pub struct OptionIterator < A > {
415
+ priv opt: Option < A >
428
416
}
429
417
430
- impl < ' self , A > Iterator < & ' self mut A > for OptionMutIterator < ' self , A > {
431
- fn next ( & mut self ) -> Option < & ' self mut A > {
418
+ impl < A > Iterator < A > for OptionIterator < A > {
419
+ fn next ( & mut self ) -> Option < A > {
432
420
util:: replace ( & mut self . opt , None )
433
421
}
434
422
0 commit comments