* Clarify code a bit.
* Move code around.
* Introduce `Order`.
* Introduce `Link` structure.
* Get rid of ptr_offset
This is beneficial since ptr_offset is essentially makes us handle two different address spaces, global (i.e. `mem`) and heap local and without it things are becoming simpler.
* Rename PREFIX_SIZE to HEADER_SIZE.
This will come in the next commits.
* Introduce a separate `Memory` trait.
This is not necessary, but will come in handy for the upcoming changes.
* Rename `ptr` to `header_ptr` where makes sense.
* Introduce a `Header` type.
* Make `bump` dumber.
This allows us to pull `HEADER_SIZE` to see that we actually allocate `order.size() + HEADER_SIZE`.
* Clean up.
* Introduce a freelists struct.
* Update documentation.
* Make Sized requirement optional to make the PR truly back-compatible.
* Apply suggestions from code review
Co-Authored-By: Gavin Wood <gavin@parity.io>
* Apply suggestions from code review
Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Gavin Wood <github@gavwood.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
* FreeingBumpAllocator: Initialize the heads to `u32::max_value()`
`self.heads` can point to an element with the index `0` in the heap.
This would make the allocator fail to reuse this element.
* Simplify the `PREFIX_SIZE` handling
This moves the wasm-allocator (`FreeingBumpHeapAllocator`) into its own
crate `sp-allocator`. This new crate can theoretically provide multiple
different allocators. Besides moving the allocator, this pr also makes
`FreeingBumpHeapAllocator` compile on `no_std`.