# HeapArray
This crate aims to give people better control of how they want to allocate memory,
by providing a customizable way to allocate blocks of memory, that optionally contains
metadata about the block itself.
It's suggested that you import the contents of this crate with `use heaparray::*;`, as a lot of the functionality of the structs in this crate are
implemented through traits.
## Features
- Arrays are allocated on the heap, with optional extra space allocated for metadata
- Swap owned objects in and out with `array.insert()`
- Arbitrarily sized objects using label and an array of bytes (`u8`)
## Examples
Creating an array:
```rust
use heaparray::*;
let len = 10;
```
Indexing works as you would expect:
```rust
array[3] = 2;
assert!(array[3] == 2);
```
Notably, you can take ownership of objects back from the container:
```rust
Iteration, allocator customization, reference counting (`RcArray`),
and atomic reference counting (`ArcArray`). Constant-sized array of arbitrary size,
i.e. `CArray`, with sizes managed by the type system (waiting on const generics for this one).
See `TODO.md` in the repository for a full list of planned features.