diff options
| author | ljedrz <ljedrz@gmail.com> | 2018-08-05 12:04:56 +0200 |
|---|---|---|
| committer | ljedrz <ljedrz@gmail.com> | 2018-08-13 22:11:57 +0200 |
| commit | e5e6375352636360add297c1f5a1f37ce71506e9 (patch) | |
| tree | 9274f6f905ccbcfe493fbc161838084f977a180a /src/libsyntax/util/thin_vec.rs | |
| parent | d5a448b3f47b22c9cb010198bdcc49d4392b090b (diff) | |
| download | rust-e5e6375352636360add297c1f5a1f37ce71506e9.tar.gz rust-e5e6375352636360add297c1f5a1f37ce71506e9.zip | |
Move SmallVec and ThinVec out of libsyntax
Diffstat (limited to 'src/libsyntax/util/thin_vec.rs')
| -rw-r--r-- | src/libsyntax/util/thin_vec.rs | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/src/libsyntax/util/thin_vec.rs b/src/libsyntax/util/thin_vec.rs deleted file mode 100644 index 546686b46b8..00000000000 --- a/src/libsyntax/util/thin_vec.rs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2016 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -/// A vector type optimized for cases where this size is usually 0 (c.f. `SmallVector`). -/// The `Option<Box<..>>` wrapping allows us to represent a zero sized vector with `None`, -/// which uses only a single (null) pointer. -#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] -pub struct ThinVec<T>(Option<Box<Vec<T>>>); - -impl<T> ThinVec<T> { - pub fn new() -> Self { - ThinVec(None) - } -} - -impl<T> From<Vec<T>> for ThinVec<T> { - fn from(vec: Vec<T>) -> Self { - if vec.is_empty() { - ThinVec(None) - } else { - ThinVec(Some(Box::new(vec))) - } - } -} - -impl<T> Into<Vec<T>> for ThinVec<T> { - fn into(self) -> Vec<T> { - match self { - ThinVec(None) => Vec::new(), - ThinVec(Some(vec)) => *vec, - } - } -} - -impl<T> ::std::ops::Deref for ThinVec<T> { - type Target = [T]; - fn deref(&self) -> &[T] { - match *self { - ThinVec(None) => &[], - ThinVec(Some(ref vec)) => vec, - } - } -} - -impl<T> Extend<T> for ThinVec<T> { - fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) { - match *self { - ThinVec(Some(ref mut vec)) => vec.extend(iter), - ThinVec(None) => *self = iter.into_iter().collect::<Vec<_>>().into(), - } - } -} |
