front-vec 0.0.6

Efficiently-prependable Vec and String types.
Documentation
# front-vec

Efficiently-prependable Vec and String types.

Exposes two types: `FrontVec<T>` and `FrontString`. Each implements a `push_front` method which efficiently prepends a value onto the *front* of the data structure.

The types implement `Deref` so that they can be used like slices/`&str`s.

# `unsafe` Warning

This is an "in-development" crate. I'm not certain all uses of `unsafe` are valid yet. Please don't use this for anything important yet.

## Potential Use Cases

### Efficient **Cons**-Lists

My use-case is for packing data together in memory more eficiently than a cons-list, but with the same API as one.

## Representation in Memory

```
my_front_vec =
[len: usize     = 3]
[cap: usize     = 8]
[buf: Unique<T> = *]
                  |
                  |
                  v
[?, ?, ?, ?, ?, x1, x2, x3]
```

This diagram shows the memory representation of a `FrontVec<T>` which corresponds to the the `Vec` `vec![x1, x2, x3]`. The question marks (`?`) represent uninitialized data.

### Downsides

This representation (I believe) does not allow the use of the `realloc` function, which assumes memory at the front of the buffer is initialized. So a `Front{Vec,String}` is slightly less efficient because of that.

## Disclaimer

This is my first time writing `unsafe` code, so any safety audit contributions are certainly welcome!