Commit Graph

189 Commits

Author SHA1 Message Date
bluss 9afff02a69 Update doc style
Remove all headings in method docs
2015-08-21 15:32:55 +02:00
bluss c35760e02c Use NoDrop to fix panic safety issues
ArrayVec::drop was not panic safe — if there would be a panic during an
element's drop, the discriminant would never be set to Dropped, and the
array elements would potentially double drop.

Fix this by going back to the old NoDrop composition. The NoDrop struct
thas its own Drop impl, that will trigger too on panic during an element's
drop. This serves to make ArrayVec::drop panic safe.

Also tweak IntoIter::drop to make it panic safe: set inner ArrayVec's
length before dropping any elements.

Thank you to @Stebalien for reporting this bug and providing the
excellent testcases in this commit.

Using NoDrop expands ArrayVec to have two drop flags again, but this
is a temporary tradeoff, drop flags will eventually go away.

Fixes #3
2015-08-20 22:33:01 +02:00
root cf273fec1f Use a non-dropping enum directly
Don't use NoDrop as a separate abstraction: Then we have two drop flags,
one for ArrayVec and one for NoDrop. Instead import the logic from
NoDrop. The result is a much smaller ArrayVec value.
2015-07-30 16:14:04 +02:00
root 5c50c4dbc7 Add method .into_inner() 2015-06-22 16:35:21 +02:00
root 66d5d9a12e Expose ArrayVec::set_len as a pub unsafe method 2015-06-22 00:17:23 +02:00
root ad22698464 arrayvec: Use odds & bump version 2015-06-02 17:30:59 +02:00
root 6081270cf3 Order & group methods logically for docs 2015-05-25 13:46:26 +02:00
root 196a9d60b6 Move tests to tests/ directory 2015-05-25 02:35:52 +02:00
root 11a864b6f7 Add test for Option<ArrayVec<_>> to be sure 2015-05-25 02:26:32 +02:00
root 8a154e9847 Use set_len() consistently and code cleanup 2015-05-25 00:26:17 +02:00
root 3d579a626d Improve .insert()'s removal of the last element 2015-05-23 12:53:35 +02:00
root 1eec0d4834 Make sure the methods on RangeArgument can be inlined 2015-05-23 12:43:45 +02:00
root 3175d97f80 Implement ArrayVec::clear 2015-05-23 03:12:38 +02:00
root be2979d87a Make sure methods in helper trait Index are inlined 2015-05-23 00:52:26 +02:00
root 37c0f53708 Add another testcase to insert 2015-05-23 00:52:26 +02:00
root ebf260ea90 Implement ArrayVec::insert 2015-05-22 20:18:01 +02:00
root d3b3fc16fb Implement array sizes in the 16-bit index range 2015-05-22 20:16:41 +02:00
root 8f8db4a3ed Implement ArrayVec::remove() and ::drain() 2015-05-22 14:22:43 +02:00
root 33e31b8ecf Implement ArrayVec::swap_remove 2015-05-22 13:49:44 +02:00
root 1b42f992ed Move Array trait to separate file
Also remove the ::new() method on the trait
2015-05-22 13:26:01 +02:00
root 00466e6efd Simplify drop test (Rc is redundant) 2015-05-21 16:04:38 +02:00
root 8047dc621c Use crate nodrop -- it moved to a separate crate 2015-05-21 11:54:46 +02:00
root 31f95d1818 Use #[repr(u8)] on the Flag enum 2015-05-20 17:17:17 +02:00
root 8730a3584b Move len last in the struct
Put len last so that it sits next to the drop flag (as of current rust)
which saves padding for element types with size_of > 1.
2015-05-20 17:17:17 +02:00
root 5b916cab16 Implement DoubleEndedIterator for ArrayVec 2015-05-20 17:17:17 +02:00
root ad4780704a Remove redundant imports 2015-05-20 17:17:17 +02:00
root 4e9e50effc Add missing inline 2015-05-20 17:17:17 +02:00
root b1390749f9 Add essential traits: Clone, Eq, Hash, referencing traits, Debug 2015-05-19 19:19:12 +02:00
root 4ac4a0bbee Add test for Send + Sync 2015-05-19 18:18:41 +02:00
root 311ab8916c Implement Extend and FromIterator 2015-05-19 18:14:37 +02:00
root 7f3b11adb3 Edit docs 2015-05-19 17:19:03 +02:00
root f4103ad939 Add IntoIterator for &mut ArrayVec 2015-05-19 17:16:31 +02:00
root f5da5c9fe2 cleanup 2015-05-19 17:09:06 +02:00
root 55612bcae8 Add comment to Array::new 2015-05-19 17:09:06 +02:00
root 04b9af476b Test for drop 2015-05-19 17:09:06 +02:00
root d74dfcc5cc Tests 2015-05-19 17:09:06 +02:00
root 23136eb652 Docs 2015-05-19 17:09:06 +02:00
root faa05e2ca8 More sizes 2015-05-19 17:09:06 +02:00
root 1a39598633 Initial commit 2015-05-19 17:09:06 +02:00