## Container iterators
Containers implement iteration over the contained elements by returning an
-iterator object. For example, vector slices several iterators available:
+iterator object. For example, for vector slices several iterators are available:
* `iter()` for immutable references to the elements
* `mut_iter()` for mutable references to the elements
use core::default::Default;
use core::fmt;
use core::iter::RandomAccessIterator;
+use core::iter;
+use std::hash::{Writer, Hash};
use {Deque, Collection, Mutable, MutableSeq};
use vec::Vec;
}
}
+impl<A: PartialOrd> PartialOrd for RingBuf<A> {
+ fn partial_cmp(&self, other: &RingBuf<A>) -> Option<Ordering> {
+ iter::order::partial_cmp(self.iter(), other.iter())
+ }
+}
+
+impl<S: Writer, A: Hash<S>> Hash<S> for RingBuf<A> {
+ fn hash(&self, state: &mut S) {
+ self.len().hash(state);
+ for elt in self.iter() {
+ elt.hash(state);
+ }
+ }
+}
+
impl<A> FromIterator<A> for RingBuf<A> {
fn from_iter<T: Iterator<A>>(iterator: T) -> RingBuf<A> {
let (lower, _) = iterator.size_hint();
use std::fmt::Show;
use std::prelude::*;
use std::gc::{GC, Gc};
+ use std::hash;
use test::Bencher;
use test;
assert!(e == RingBuf::new());
}
+ #[test]
+ fn test_hash() {
+ let mut x = RingBuf::new();
+ let mut y = RingBuf::new();
+
+ x.push(1i);
+ x.push(2);
+ x.push(3);
+
+ y.push(0i);
+ y.push(1i);
+ y.pop_front();
+ y.push(2);
+ y.push(3);
+
+ assert!(hash::hash(&x) == hash::hash(&y));
+ }
+
+ #[test]
+ fn test_ord() {
+ let x = RingBuf::new();
+ let mut y = RingBuf::new();
+ y.push(1i);
+ y.push(2);
+ y.push(3);
+ assert!(x < y);
+ assert!(y > x);
+ assert!(x <= x);
+ assert!(x >= x);
+ }
+
#[test]
fn test_show() {
let ringbuf: RingBuf<int> = range(0i, 10).collect();
///
/// # Example
///
+ /// ```
/// use std::collections::HashSet;
/// let mut set: HashSet<int> = HashSet::new();
/// ```
///
/// # Example
///
+ /// ```
/// use std::collections::HashSet;
/// let mut set: HashSet<int> = HashSet::with_capacity(10);
/// ```
///
/// # Example
///
+ /// ```
/// use std::collections::HashSet;
/// let mut set: HashSet<int> = HashSet::new();
/// set.reserve(10);