@@ -325,6 +325,30 @@ pub trait MutableSet<T>: Set<T> + Mutable {
325325 fn remove ( & mut self , value : & T ) -> bool ;
326326}
327327
328+ pub trait MutableSeq < T > : Mutable {
329+ /// Append an element to the back of a collection.
330+ ///
331+ /// # Example
332+ ///
333+ /// ```rust
334+ /// let mut vec = vec!(1i, 2);
335+ /// vec.push(3);
336+ /// assert_eq!(vec, vec!(1, 2, 3));
337+ /// ```
338+ fn push ( & mut self , t : T ) ;
339+ /// Remove the last element from a collection and return it, or `None` if it is
340+ /// empty.
341+ ///
342+ /// # Example
343+ ///
344+ /// ```rust
345+ /// let mut vec = vec!(1i, 2, 3);
346+ /// assert_eq!(vec.pop(), Some(3));
347+ /// assert_eq!(vec, vec!(1, 2));
348+ /// ```
349+ fn pop ( & mut self ) -> Option < T > ;
350+ }
351+
328352/// A double-ended sequence that allows querying, insertion and deletion at both
329353/// ends.
330354///
@@ -336,9 +360,9 @@ pub trait MutableSet<T>: Set<T> + Mutable {
336360/// use std::collections::{RingBuf, Deque};
337361///
338362/// let mut queue = RingBuf::new();
339- /// queue.push_back (1i);
340- /// queue.push_back (2i);
341- /// queue.push_back (3i);
363+ /// queue.push (1i);
364+ /// queue.push (2i);
365+ /// queue.push (3i);
342366///
343367/// // Will print 1, 2, 3
344368/// while !queue.is_empty() {
@@ -374,17 +398,17 @@ pub trait MutableSet<T>: Set<T> + Mutable {
374398/// // Init deque with 1, 2, 3, 4
375399/// deque.push_front(2i);
376400/// deque.push_front(1i);
377- /// deque.push_back (3i);
378- /// deque.push_back (4i);
401+ /// deque.push (3i);
402+ /// deque.push (4i);
379403///
380404/// // Will print (1, 4) and (2, 3)
381405/// while !deque.is_empty() {
382406/// let f = deque.pop_front().unwrap();
383- /// let b = deque.pop_back ().unwrap();
407+ /// let b = deque.pop ().unwrap();
384408/// println!("{}", (f, b));
385409/// }
386410/// ```
387- pub trait Deque < T > : Mutable {
411+ pub trait Deque < T > : MutableSeq < T > {
388412 /// Provide a reference to the front element, or `None` if the sequence is
389413 /// empty.
390414 ///
@@ -396,8 +420,8 @@ pub trait Deque<T> : Mutable {
396420 /// let mut d = RingBuf::new();
397421 /// assert_eq!(d.front(), None);
398422 ///
399- /// d.push_back (1i);
400- /// d.push_back (2i);
423+ /// d.push (1i);
424+ /// d.push (2i);
401425 /// assert_eq!(d.front(), Some(&1i));
402426 /// ```
403427 fn front < ' a > ( & ' a self ) -> Option < & ' a T > ;
@@ -413,8 +437,8 @@ pub trait Deque<T> : Mutable {
413437 /// let mut d = RingBuf::new();
414438 /// assert_eq!(d.front_mut(), None);
415439 ///
416- /// d.push_back (1i);
417- /// d.push_back (2i);
440+ /// d.push (1i);
441+ /// d.push (2i);
418442 /// match d.front_mut() {
419443 /// Some(x) => *x = 9i,
420444 /// None => (),
@@ -434,8 +458,8 @@ pub trait Deque<T> : Mutable {
434458 /// let mut d = DList::new();
435459 /// assert_eq!(d.back(), None);
436460 ///
437- /// d.push_back (1i);
438- /// d.push_back (2i);
461+ /// d.push (1i);
462+ /// d.push (2i);
439463 /// assert_eq!(d.back(), Some(&2i));
440464 /// ```
441465 fn back < ' a > ( & ' a self ) -> Option < & ' a T > ;
@@ -451,8 +475,8 @@ pub trait Deque<T> : Mutable {
451475 /// let mut d = DList::new();
452476 /// assert_eq!(d.back(), None);
453477 ///
454- /// d.push_back (1i);
455- /// d.push_back (2i);
478+ /// d.push (1i);
479+ /// d.push (2i);
456480 /// match d.back_mut() {
457481 /// Some(x) => *x = 9i,
458482 /// None => (),
@@ -479,21 +503,22 @@ pub trait Deque<T> : Mutable {
479503 ///
480504 /// # Example
481505 ///
482- /// ```
506+ /// ```ignore
483507 /// use std::collections::{DList, Deque};
484508 ///
485509 /// let mut d = DList::new();
486510 /// d.push_back(1i);
487511 /// d.push_back(2i);
488512 /// assert_eq!(d.front(), Some(&1i));
489513 /// ```
490- fn push_back ( & mut self , elt : T ) ;
514+ #[ deprecated = "use the `push` method" ]
515+ fn push_back ( & mut self , elt : T ) { self . push ( elt) }
491516
492517 /// Remove the last element and return it, or `None` if the sequence is empty.
493518 ///
494519 /// # Example
495520 ///
496- /// ```
521+ /// ```ignore
497522 /// use std::collections::{RingBuf, Deque};
498523 ///
499524 /// let mut d = RingBuf::new();
@@ -504,7 +529,8 @@ pub trait Deque<T> : Mutable {
504529 /// assert_eq!(d.pop_back(), Some(1i));
505530 /// assert_eq!(d.pop_back(), None);
506531 /// ```
507- fn pop_back ( & mut self ) -> Option < T > ;
532+ #[ deprecated = "use the `pop` method" ]
533+ fn pop_back ( & mut self ) -> Option < T > { self . pop ( ) }
508534
509535 /// Remove the first element and return it, or `None` if the sequence is empty.
510536 ///
@@ -514,8 +540,8 @@ pub trait Deque<T> : Mutable {
514540 /// use std::collections::{RingBuf, Deque};
515541 ///
516542 /// let mut d = RingBuf::new();
517- /// d.push_back (1i);
518- /// d.push_back (2i);
543+ /// d.push (1i);
544+ /// d.push (2i);
519545 ///
520546 /// assert_eq!(d.pop_front(), Some(1i));
521547 /// assert_eq!(d.pop_front(), Some(2i));
@@ -535,4 +561,8 @@ mod std {
535561 pub use core:: clone; // deriving(Clone)
536562 pub use core:: cmp; // deriving(Eq, Ord, etc.)
537563 pub use hash; // deriving(Hash)
564+
565+ pub mod collections {
566+ pub use MutableSeq ;
567+ }
538568}
0 commit comments