Auto merge of #38 - Marwes:deref_slice, r=jdm

Specify that VecLike derefs to a slice

I believe this is just an oversight. Since `<[T]>::len` is now available through the `Deref` bound I also removed `VecLike::len`.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-smallvec/38)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo
2016-10-05 11:49:36 -05:00
committed by GitHub
2 changed files with 21 additions and 13 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "smallvec"
version = "0.2.1"
version = "0.3.0"
authors = ["Simon Sapin <simon.sapin@exyr.org>"]
license = "MPL-2.0"
repository = "https://github.com/servo/rust-smallvec"
+20 -12
View File
@@ -29,19 +29,13 @@ pub trait VecLike<T>:
ops::IndexMut<ops::RangeTo<usize>> +
ops::Index<ops::RangeFull, Output=[T]> +
ops::IndexMut<ops::RangeFull> +
ops::Deref +
ops::DerefMut +
ops::DerefMut<Target = [T]> +
Extend<T> {
fn len(&self) -> usize;
fn push(&mut self, value: T);
}
impl<T> VecLike<T> for Vec<T> {
#[inline]
fn len(&self) -> usize {
Vec::len(self)
}
#[inline]
fn push(&mut self, value: T) {
@@ -150,12 +144,15 @@ impl<A: Array> SmallVec<A> {
pub fn inline_size(&self) -> usize {
A::size()
}
pub fn len(&self) -> usize {
self.len
}
pub fn is_empty(&self) -> bool {
self.len == 0
}
pub fn capacity(&self) -> usize {
match self.data {
Inline { .. } => A::size(),
@@ -401,11 +398,6 @@ impl_index!(ops::RangeFull, [A::Item]);
impl<A: Array> VecLike<A::Item> for SmallVec<A> {
#[inline]
fn len(&self) -> usize {
SmallVec::len(self)
}
#[inline]
fn push(&mut self, value: A::Item) {
SmallVec::push(self, value);
@@ -1014,4 +1006,20 @@ pub mod tests {
assert_eq!(vec.clone().into_iter().len(), 3);
assert_eq!(vec.drain().len(), 3);
}
#[test]
fn veclike_deref_slice() {
use super::VecLike;
fn test<T: VecLike<i32>>(vec: &mut T) {
assert!(!vec.is_empty());
assert_eq!(vec.len(), 3);
vec.sort();
assert_eq!(&vec[..], [1, 2, 3]);
}
let mut vec = SmallVec::<[i32; 2]>::from(&[3, 1, 2][..]);
test(&mut vec);
}
}