use rc::Rc;
use str::{Str, StrSlice};
use vec::{Vector, ImmutableVector};
+use vec_ng::Vec;
/// Reexport the `sip::hash` function as our default hasher.
pub use hash = self::sip::hash;
}
}
+impl<S: Writer, T: Hash<S>> Hash<S> for Vec<T> {
+ #[inline]
+ fn hash(&self, state: &mut S) {
+ self.as_slice().hash(state);
+ }
+}
+
impl<'a, S: Writer, T: Hash<S>> Hash<S> for &'a T {
#[inline]
fn hash(&self, state: &mut S) {
use clone::Clone;
use cmp::{Eq, Ordering, TotalEq, TotalOrd};
use container::Container;
+use default::Default;
use iter::{DoubleEndedIterator, FromIterator, Iterator};
use libc::{free, c_void};
use mem::{size_of, move_val_init};
use ptr;
use rt::global_heap::{malloc_raw, realloc_raw};
use raw::Slice;
-use vec::{ImmutableVector, Items, MutItems, MutableVector, RevItems};
+use vec::{ImmutableEqVector, ImmutableVector, Items, MutItems, MutableVector};
+use vec::{RevItems};
pub struct Vec<T> {
priv len: uint,
pub fn slice_from<'a>(&'a self, start: uint) -> &'a [T] {
self.as_slice().slice_from(start)
}
+
+ #[inline]
+ pub fn init<'a>(&'a self) -> &'a [T] {
+ self.slice(0, self.len() - 1)
+ }
+}
+
+impl<T:Eq> Vec<T> {
+ /// Return true if a vector contains an element with the given value
+ pub fn contains(&self, x: &T) -> bool {
+ self.as_slice().contains(x)
+ }
}
#[inline]
first
}
+/// Appends one element to the vector provided. The vector itself is then
+/// returned for use again.
+#[inline]
+pub fn append_one<T>(mut lhs: Vec<T>, x: T) -> Vec<T> {
+ lhs.push(x);
+ lhs
+}
+
#[unsafe_destructor]
impl<T> Drop for Vec<T> {
fn drop(&mut self) {
}
}
+impl<T> Default for Vec<T> {
+ fn default() -> Vec<T> {
+ Vec::new()
+ }
+}
+
pub struct MoveItems<T> {
priv allocation: *mut c_void, // the block of memory allocated for the vector
priv iter: Items<'static, T>