diff options
Diffstat (limited to 'src/libstd/vec_ng.rs')
| -rw-r--r-- | src/libstd/vec_ng.rs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/libstd/vec_ng.rs b/src/libstd/vec_ng.rs index 52d3405f8c1..6cc3ccc3452 100644 --- a/src/libstd/vec_ng.rs +++ b/src/libstd/vec_ng.rs @@ -15,6 +15,7 @@ use cast::{forget, transmute}; 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}; @@ -26,7 +27,8 @@ use ptr::RawPtr; 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, @@ -340,6 +342,18 @@ impl<T> Vec<T> { 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] @@ -348,6 +362,14 @@ pub fn append<T:Clone>(mut first: Vec<T>, second: &[T]) -> Vec<T> { 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) { @@ -360,6 +382,12 @@ impl<T> Drop for Vec<T> { } } +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> |
