From 46b64537cb227b1611c2f05d4b02fb0f1ac20be1 Mon Sep 17 00:00:00 2001 From: Clar Fon Date: Sun, 28 Oct 2018 17:28:55 -0400 Subject: [PATCH 01/12] Implement Clone, Debug for IntoIter --- src/lib.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 96e7a24..8f08401 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -748,6 +748,30 @@ impl Drop for IntoIter { } } +impl Clone for IntoIter +where + A::Item: Clone, +{ + fn clone(&self) -> IntoIter { + self.v[self.index.to_usize()..] + .iter() + .cloned() + .collect::>() + .into_iter() + } +} + +impl fmt::Debug for IntoIter +where + A::Item: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_list() + .entries(&self.v[self.index.to_usize()..]) + .finish() + } +} + /// A draining iterator for `ArrayVec`. pub struct Drain<'a, A> where A: Array, From 2d3c2e3a0fd09bb5afa4a60358c714e52bb240ac Mon Sep 17 00:00:00 2001 From: Clar Fon Date: Sun, 28 Oct 2018 17:39:13 -0400 Subject: [PATCH 02/12] Test IntoIter::clone --- tests/tests.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/tests.rs b/tests/tests.rs index de3507a..7580eab 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -55,6 +55,7 @@ fn test_drop() { let flag = &Cell::new(0); + #[derive(Clone)] struct Bump<'a>(&'a Cell); impl<'a> Drop for Bump<'a> { @@ -105,6 +106,24 @@ fn test_drop() { assert_eq!(flag.get(), 3); } + // test cloning into_iter + flag.set(0); + { + let mut array = ArrayVec::<[_; 3]>::new(); + array.push(Bump(flag)); + array.push(Bump(flag)); + array.push(Bump(flag)); + let mut iter = array.into_iter(); + assert_eq!(flag.get(), 0); + iter.next(); + assert_eq!(flag.get(), 1); + let clone = iter.clone(); + assert_eq!(flag.get(), 1); + drop(clone); + assert_eq!(flag.get(), 3); + drop(iter); + assert_eq!(flag.get(), 5); + } } #[test] From 0b63772902818e685e1c75446624f4baa2e5659f Mon Sep 17 00:00:00 2001 From: bluss Date: Mon, 12 Nov 2018 22:22:36 +0100 Subject: [PATCH 03/12] nodrop-union 0.1.10 --- nodrop-union/Cargo.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nodrop-union/Cargo.toml b/nodrop-union/Cargo.toml index 3e693c9..c8f49b4 100644 --- a/nodrop-union/Cargo.toml +++ b/nodrop-union/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nodrop-union" -version = "0.1.9" +version = "0.1.10" authors = ["bluss"] license = "MIT/Apache-2.0" @@ -11,3 +11,5 @@ repository = "https://github.com/bluss/arrayvec" keywords = ["container", "drop", "no_std"] +[package.metadata.release] +no-dev-version = true From 08c20edbb0c62939904759b9c14095ca0fd07d03 Mon Sep 17 00:00:00 2001 From: bluss Date: Mon, 12 Nov 2018 22:22:53 +0100 Subject: [PATCH 04/12] nodrop 0.1.13 --- nodrop/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodrop/Cargo.toml b/nodrop/Cargo.toml index ba667e8..9428b72 100644 --- a/nodrop/Cargo.toml +++ b/nodrop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nodrop" -version = "0.1.12" +version = "0.1.13" authors = ["bluss"] license = "MIT/Apache-2.0" From 813e9dde42e2193f525533363739287230e6a0ed Mon Sep 17 00:00:00 2001 From: bluss Date: Mon, 12 Nov 2018 22:26:09 +0100 Subject: [PATCH 05/12] MAINT: Update readme files for nodrop crates Fixes #107 --- nodrop-union/README.rst | 4 ++++ nodrop/README.rst | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/nodrop-union/README.rst b/nodrop-union/README.rst index 3e43cda..0a3f554 100644 --- a/nodrop-union/README.rst +++ b/nodrop-union/README.rst @@ -2,6 +2,10 @@ Recent Changes (nodrop-union) ----------------------- +- 0.1.10 + + - Update to include license files in the crate by @ignatenkobrain + - 0.1.9 - Add ``Copy, Clone`` implementations diff --git a/nodrop/README.rst b/nodrop/README.rst index 401a4a6..2c2e63f 100644 --- a/nodrop/README.rst +++ b/nodrop/README.rst @@ -5,6 +5,10 @@ nodrop Recent Changes (nodrop) ----------------------- +- 0.1.13 + + - Update to include license files in the crate by @ignatenkobrain + - 0.1.12 - Remove dependency on crate odds. From f1d73f4feb966fa4423052143fd6f63e29cda5a2 Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 09:16:48 +0100 Subject: [PATCH 06/12] FEAT: Add array sizes 33 to 128 and 129 to 255 under feature flags This way we cover all users up to 256 at least. The reason these are not enabled by default is that they slow down the compilation of the crate by a factor of 2-3x. --- Cargo.toml | 3 +++ src/array.rs | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index dd5e968..5c3b7a4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,6 +40,9 @@ std = [] use_union = [] serde-1 = ["serde"] +array-sizes-33-128 = [] +array-sizes-129-255 = [] + [package.metadata.docs.rs] features = ["serde-1"] diff --git a/src/array.rs b/src/array.rs index 2ca90b3..be93f0f 100644 --- a/src/array.rs +++ b/src/array.rs @@ -77,15 +77,44 @@ macro_rules! fix_array_impl { macro_rules! fix_array_impl_recursive { ($index_type:ty, ) => (); - ($index_type:ty, $len:expr, $($more:expr,)*) => ( - fix_array_impl!($index_type, $len); - fix_array_impl_recursive!($index_type, $($more,)*); + ($index_type:ty, $($len:expr,)*) => ( + $(fix_array_impl!($index_type, $len);)* ); } -fix_array_impl_recursive!(u8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 40, 48, 50, 56, 64, 72, 96, 100, 128, 160, 192, 200, 224,); +fix_array_impl_recursive!(u8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, ); + +#[cfg(not(feature="array-sizes-33-128"))] +fix_array_impl_recursive!(u8, 32, 40, 48, 50, 56, 64, 72, 96, 100, 128, ); + +#[cfg(feature="array-sizes-33-128")] +fix_array_impl_recursive!(u8, +32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, +52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, +72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, +92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, +109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, +125, 126, 127, 128, +); + +#[cfg(not(feature="array-sizes-129-255"))] +fix_array_impl_recursive!(u8, 160, 192, 200, 224,); + +#[cfg(feature="array-sizes-129-255")] +fix_array_impl_recursive!(u8, +129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, +141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, +157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, +173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, +189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, +205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, +221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, +237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, +253, 254, 255, +); + fix_array_impl_recursive!(u16, 256, 384, 512, 768, 1024, 2048, 4096, 8192, 16384, 32768,); // This array size doesn't exist on 16-bit #[cfg(any(target_pointer_width="32", target_pointer_width="64"))] From 50728e4cda9e2bc22e73c1c57a8565ebee6017a9 Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 09:23:04 +0100 Subject: [PATCH 07/12] DOC: Add doc for additional array features flags --- src/array.rs | 12 ++++++++++++ src/lib.rs | 3 +++ 2 files changed, 15 insertions(+) diff --git a/src/array.rs b/src/array.rs index be93f0f..5fcc9c5 100644 --- a/src/array.rs +++ b/src/array.rs @@ -1,5 +1,17 @@ /// Trait for fixed size arrays. +/// +/// This trait is implemented for some specific array sizes, see +/// the implementor list below. At the current state of Rust we can't +/// make this fully general for every array size. +/// +/// The following crate features add more array sizes (and they are not +/// enabled by default due to their impact on compliation speed). +/// +/// - `array-sizes-33-128`: All sizes 33 to 128 are implemented +/// (a few in this range are included by default). +/// - `array-sizes-129-255`: All sizes 129 to 255 are implemented +/// (a few in this range are included by default). pub unsafe trait Array { /// The array’s element type type Item; diff --git a/src/lib.rs b/src/lib.rs index 8f08401..50903c5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,6 +18,9 @@ //! - `serde-1` //! - Optional //! - Enable serialization for ArrayVec and ArrayString using serde 1.0 +//! - `array-sizes-33-128`, `array-sizes-129-255` +//! - Optional +//! - Enable more array sizes (see [Array] for more information) //! //! ## Rust Version //! From 4dc503e17d7024b30958aa20b5555b1a8142e89f Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 09:25:30 +0100 Subject: [PATCH 08/12] MAINT: Add array sizes to travis build --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index d62112c..e3afc19 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,9 @@ matrix: env: - NODEFAULT=1 - NODROP_FEATURES='use_needs_drop' + - rust: stable + env: + - FEATURES='array-sizes-33-128 array-sizes-129-255' - rust: beta - rust: nightly env: From 9d1ede62eaf17a1b551f452db495f1014aa811e4 Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 09:26:01 +0100 Subject: [PATCH 09/12] MAINT: Add Rust 1.22 to travis build --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index e3afc19..1feee2d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,9 @@ matrix: env: - NODEFAULT=1 - NODROP_FEATURES='use_needs_drop' + - rust: 1.22.1 + env: + - FEATURES='array-sizes-33-128 array-sizes-129-255' - rust: stable env: - FEATURES='array-sizes-33-128 array-sizes-129-255' From e355c9eb314360aaa47afc71b1f15b4e9590d2c4 Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 09:32:29 +0100 Subject: [PATCH 10/12] DOC: Hide Array methods on impls These just clutter up the docs. Most important that the users can see the list of implemented array sizes, not the methods for each of those. --- src/array.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/array.rs b/src/array.rs index 5fcc9c5..4f099a6 100644 --- a/src/array.rs +++ b/src/array.rs @@ -77,10 +77,13 @@ macro_rules! fix_array_impl { unsafe impl Array for [T; $len] { type Item = T; type Index = $index_type; + #[doc(hidden)] #[inline(always)] fn as_ptr(&self) -> *const T { self as *const _ as *const _ } + #[doc(hidden)] #[inline(always)] fn as_mut_ptr(&mut self) -> *mut T { self as *mut _ as *mut _} + #[doc(hidden)] #[inline(always)] fn capacity() -> usize { $len } } From d77b93079fd735e0976f3c24d816f62edf599c13 Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 09:36:22 +0100 Subject: [PATCH 11/12] TEST: Add minimal tests for new array sizes --- tests/tests.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/tests.rs b/tests/tests.rs index 7580eab..3261df3 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -485,3 +485,18 @@ fn test_default() { assert_eq!(s.len(), 0); assert_eq!(v.len(), 0); } + +#[cfg(feature="array-sizes-33-128")] +#[test] +fn test_sizes_33_128() { + ArrayVec::from([0u8; 52]); + ArrayVec::from([0u8; 127]); +} + +#[cfg(feature="array-sizes-129-255")] +#[test] +fn test_sizes_129_255() { + ArrayVec::from([0u8; 237]); + ArrayVec::from([0u8; 255]); +} + From c8d12cecb372a7bcf9cd213b6db72e359fbc6fb3 Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 09:46:33 +0100 Subject: [PATCH 12/12] 0.4.8 --- Cargo.toml | 2 +- README.rst | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 5c3b7a4..f7a1948 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "arrayvec" -version = "0.4.7" +version = "0.4.8" authors = ["bluss"] license = "MIT/Apache-2.0" diff --git a/README.rst b/README.rst index c10ae32..0de5000 100644 --- a/README.rst +++ b/README.rst @@ -22,6 +22,15 @@ __ https://docs.rs/arrayvec Recent Changes (arrayvec) ------------------------- +- 0.4.8 + + - Implement Clone and Debug for ``IntoIter`` by @clarcharr + - Add more array sizes under crate features. These cover all in the range + up to 128 and 129 to 255 respectively (we have a few of those by default): + + - ``array-size-33-128`` + - ``array-size-129-255`` + - 0.4.7 - Fix future compat warning about raw pointer casts