Recent Changes (arrayvec)
=========================

## 0.7.2

- Add `.as_mut_str()` to `ArrayString` by @clarfonthey
- Add `remaining_capacity` to `ArrayString` by @bhgomes
- Add `zero_filled` constructor by @c410-f3r
- Optimize `retain` by @TennyZhuang and @niklasf
- Make the following methods `const` by @bhgomes:
  - len
  - is_empty
  - capacity
  - is_full
  - remaining_capacity
  - CapacityError::new

## 0.7.1

- Add new ArrayVec methods `.take()` and `.into_inner_unchecked()` by @conradludgate
- `clone_from` now uses `truncate` when needed by @a1phyr

## 0.7.0

- `fn new_const` is now the way to const-construct arrayvec and arraystring,
  and `fn new` has been reverted to a regular "non-const" function.
  This works around performance issue #182, where the const fn version did not
  optimize well. Change by @bluss with thanks to @rodrimati1992 and @niklasf
  for analyzing the problem.

- The deprecated feature flag `unstable-const-fn` was removed, since it's not needed

- Optimize `.retain()` by using the same algorithm as in std, change by @niklasf,
  issue #174. Original optimization in Rust std by @oxalica in rust-lang/rust/pull/81126

## 0.6.1

- The ``ArrayVec::new`` and ``ArrayString::new`` constructors are properly
  const fns on stable and the feature flag ``unstable-const-fn`` is now deprecated.
  by @rodrimati1992

- Small fix to the capacity check macro by @Xaeroxe
- Typo fix in documentation by @cuviper
- Small code cleanup by @bluss

## 0.6.0

- The **const generics** release 🎉. Arrayvec finally implements what it
  wanted to implement, since its first version: a vector backed by an array,
  with generic parameters for the arbitrary element type *and* backing array
  capacity.

  The New type syntax is `ArrayVec<T, CAP>` where `CAP` is the arrayvec capacity.
  For arraystring the syntax is `ArrayString<CAP>`.

  Length is stored internally as u32; this limits the maximum capacity. The size
  of the `ArrayVec` or `ArrayString` structs for the same capacity may grow
  slightly compared with the previous version (depending on padding requirements
  for the element type). Change by @bluss.

- Arrayvec's `.extend()` and `FromIterator`/`.collect()` to arrayvec now
  **panic** if the capacity of the arrayvec is exceeded. Change by @bluss.

- Arraystring now implements `TryFrom<&str>` and `TryFrom<fmt::Arguments>` by
  @c410-f3r

- Minimum supported rust version is Rust 1.51

## 0.5.2

- Add `is_empty` methods for ArrayVec and ArrayString by @nicbn
- Implement `TryFrom<Slice>` for ArrayVec by @paulkernfeld
- Add `unstable-const-fn` to make `new` methods const by @m-ou-se
- Run miri in CI and a few related fixes by @RalfJung
- Fix outdated comment by @Phlosioneer
- Move changelog to a separate file by @Luro02
- Remove deprecated `Error::description` by @AnderEnder
- Use pointer method `add` by @hbina

## 0.5.1

- Add `as_ptr`, `as_mut_ptr` accessors directly on the `ArrayVec` by @tbu-
  (matches the same addition to `Vec` which happened in Rust 1.37).
- Add method `ArrayString::len` (now available directly, not just through deref to str).
- Use raw pointers instead of `&mut [u8]` for encoding chars into `ArrayString`
  (uninit best practice fix).
- Use raw pointers instead of `get_unchecked_mut` where the target may be
  uninitialized everywhere relevant in the ArrayVec implementation
  (uninit best practice fix).
- Changed inline hints on many methods, mainly removing inline hints
- `ArrayVec::dispose` is now deprecated (it has no purpose anymore)

## 0.4.12

- Use raw pointers instead of `get_unchecked_mut` where the target may be
  uninitialized everywhere relevant in the ArrayVec implementation.

## 0.5.0

- Use `MaybeUninit` (now unconditionally) in the implementation of
  `ArrayVec`
- Use `MaybeUninit` (now unconditionally) in the implementation of
  `ArrayString`
- The crate feature for serde serialization is now named `serde`.
- Updated the `Array` trait interface, and it is now easier to use for
  users outside the crate.
- Add `FromStr` impl for `ArrayString` by @despawnerer
- Add method `try_extend_from_slice` to `ArrayVec`, which is always
  effecient by @Thomasdezeeuw.
- Add method `remaining_capacity` by @Thomasdezeeuw
- Improve performance of the `extend` method.
- The index type of zero capacity vectors is now itself zero size, by
  @clarfon
- Use `drop_in_place` for truncate and clear methods. This affects drop order
  and resume from panic during drop.
- Use Rust 2018 edition for the implementation
- Require Rust 1.36 or later, for the unconditional `MaybeUninit`
  improvements.

## Older releases

- 0.4.11

  - In Rust 1.36 or later, use newly stable `MaybeUninit`. This extends the
    soundness work introduced in 0.4.9, we are finally able to use this in
    stable. We use feature detection (build script) to enable this at build
    time.

- 0.4.10

  - Use `repr(C)` in the `union` version that was introduced in 0.4.9, to
    allay some soundness concerns.

- 0.4.9

  - Use `union` in the implementation on when this is detected to be supported
    (nightly only for now). This is a better solution for treating uninitialized
    regions correctly, and we'll use it in stable Rust as soon as we are able.
    When this is enabled, the `ArrayVec` has no space overhead in its memory
    layout, although the size of the vec should not be relied upon. (See [#114](https://github.com/bluss/arrayvec/pull/114))
  - `ArrayString` updated to not use uninitialized memory, it instead zeros its
    backing array. This will be refined in the next version, since we
    need to make changes to the user visible API.
  - The `use_union` feature now does nothing (like its documentation foretold).


- 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
  - Use `drop_in_place` when dropping the arrayvec by-value iterator
  - Decrease mininum Rust version (see docs) by @jeehoonkang

- 0.3.25

  - Fix future compat warning about raw pointer casts

- 0.4.6

  - Fix compilation on 16-bit targets. This means, the 65536 array size is not
    included on these targets.

- 0.3.24

  - Fix compilation on 16-bit targets. This means, the 65536 array size is not
    included on these targets.
  - Fix license files so that they are both included (was fixed in 0.4 before)

- 0.4.5

  - Add methods to `ArrayString` by @DenialAdams:

    - `.pop() -> Option<char>`
    - `.truncate(new_len)`
    - `.remove(index) -> char`

  - Remove dependency on crate odds
  - Document debug assertions in unsafe methods better

- 0.4.4

  - Add method `ArrayVec::truncate()` by @niklasf

- 0.4.3

  - Improve performance for `ArrayVec::extend` with a lower level
    implementation (#74)
  - Small cleanup in dependencies (use no std for crates where we don't need more)

- 0.4.2

  - Add constructor method `new` to `CapacityError`.

- 0.4.1

  - Add `Default` impl to `ArrayString` by @tbu-

- 0.4.0

  - Reformed signatures and error handling by @bluss and @tbu-:

    - `ArrayVec`'s `push, insert, remove, swap_remove` now match `Vec`'s
      corresponding signature and panic on capacity errors where applicable.
    - Add fallible methods `try_push, insert` and checked methods
      `pop_at, swap_pop`.
    - Similar changes to `ArrayString`'s push methods.

  - Use a local version of the `RangeArgument` trait
  - Add array sizes 50, 150, 200 by @daboross
  - Support serde 1.0 by @daboross
  - New method `.push_unchecked()` by @niklasf
  - `ArrayString` implements `PartialOrd, Ord` by @tbu-
  - Require Rust 1.14
  - crate feature `use_generic_array` was dropped.

- 0.3.23

  - Implement `PartialOrd, Ord` as well as `PartialOrd<str>` for
    `ArrayString`.

- 0.3.22

  - Implement `Array` for the 65536 size

- 0.3.21

  - Use `encode_utf8` from crate odds
  - Add constructor `ArrayString::from_byte_string`

- 0.3.20

  - Simplify and speed up `ArrayString`’s `.push(char)`-

- 0.3.19

  - Add new crate feature `use_generic_array` which allows using their
    `GenericArray` just like a regular fixed size array for the storage
    of an `ArrayVec`.

- 0.3.18

  - Fix bounds check in `ArrayVec::insert`!
    It would be buggy if `self.len() < index < self.capacity()`. Take note of
    the push out behavior specified in the docs.

- 0.3.17

  - Added crate feature `use_union` which forwards to the nodrop crate feature
  - Added methods `.is_full()` to `ArrayVec` and `ArrayString`.

- 0.3.16

  - Added method `.retain()` to `ArrayVec`.
  - Added methods `.as_slice(), .as_mut_slice()` to `ArrayVec` and `.as_str()`
    to `ArrayString`.

- 0.3.15

  - Add feature std, which you can opt out of to use `no_std` (requires Rust 1.6
    to opt out).
  - Implement `Clone::clone_from` for ArrayVec and ArrayString

- 0.3.14

  - Add `ArrayString::from(&str)`

- 0.3.13

  - Added `DerefMut` impl for `ArrayString`.
  - Added method `.simplify()` to drop the element for `CapacityError`.
  - Added method `.dispose()` to `ArrayVec`

- 0.3.12

  - Added ArrayString, a fixed capacity analogy of String

- 0.3.11

  - Added trait impls Default, PartialOrd, Ord, Write for ArrayVec

- 0.3.10

  - Go back to using external NoDrop, fixing a panic safety bug (issue #3)

- 0.3.8

  - Inline the non-dropping logic to remove one drop flag in the
    ArrayVec representation.

- 0.3.7

  - Added method .into_inner()
  - Added unsafe method .set_len()
