# Table of Contents 1. [Warlock](#org4532644) 1. [More](#orgc581ab1) 2. [Goals](#org7bb6f6a) 3. [Non-goals](#org79a52c8) 4. [Why not to use this crate](#org46c6793) 5. [About allocators](#org5239f87) # Warlock A collection of data structures optimized for use alongside an arena allocator. ## More Warlock provides some collections typically provided by `std` which are optimized for use alongside an arena allocator. That is, these collections **DO NOT** free their own memory. The memory they allocate is expected to be cleaned up by the allocator itself. However, when the collections contain items that \`impl Drop\`, the collections will drop any items they contain properly. These collections also differ slightly from the standard collections in that they assume that memory allocations can fail, and will return \`Result\`s for any operation that allocates memory. Warlock also provides a very, very, very simple bump allocator, which may be used alongside these data structures. ## Goals - As close to `std` as possible - Compile on Rust stable (see [1.5](#org5239f87) for more information) ## Non-goals - Be a 100% drop-in replacement for `std` containers ## Why not to use this crate - You want collections that behave correctly w/r/t memory allocation under any circumstance. - You want a 100% stable crate. This crate is under heavy development ## About allocators As of this writing, there is currently an ongoing effort to add a standard `Allocator` trait/concept to `std`. It is *partially* complete, however, I expect that it will be quite a while before it lands in stable. In the meantime, this crate provides an `Allocator` trait which is designed to be as close as possible to the proposed standard. Once the standard `Allocator` trait is merged, **this will be dropped**. **In the future**, this crate will provide an optional feature which will add a blanket implementation of the `std` `Allocator` trait for `warlock::Allocator`.