A dynamic vector that can store elements of any single type.
# Usage
`UniVec` is a dynamic vector that can store elements of any single type. It is similar to
`Vec<Box<dyn Any>>`, but more lightweight.
`UniVec` is useful when you need to store elements of a single type, but you don't know the
type at compile time.
# Example
```
# use univec::UniVec;
let mut univec = UniVec::new();
univec.push(&42_i32);
let mut element = univec.get_mut::<i32>(0).unwrap();
if let Some(elem) = element {
*elem += 10;
}
assert_eq!(univec.get::<i32>(0).unwrap(), Some(&52));
```
# Performance
`UniVec` is a wrapper around dyn trait of a `Vec`.
Most operations are just a single layer of indirection into the underlying `Vec`.
Because of this, `UniVec` should have performance close to `Vec`.
# Limitations
The main limitation of `UniVec` is that it can only store a single type of element.
This is by design, as `UniVec` is intended to be a simple, flexible, and lightweight
alternative to `Vec<Box<dyn Any>>`.
# Fun Fact
This crates is a testbed for code and documentation generation with ChatGPT and
Codepilot. Nevertheless all code is audited and tested.
# Contribution
This crate is far from complete. Contributions are welcome! Feel free to open an issue or
submit a pull request.