allocator_api 0.1.0

A copy of the unstable allocator_api (https://github.com/rust-lang/rust/issues/32838) Usable with stable rust, but requires 1.25.
Documentation
/// A dummy allocator for tests.

mod dummy {

    use super::allocator_api::{Alloc, AllocErr, Layout};

    pub struct MyHeap;

    static mut HEAP_BUF: [u8; 4096] = [0; 4096];
    static mut HEAP_CURSOR: usize = 0;

    unsafe impl<'a> Alloc for MyHeap {
        unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> {
            let ptr = HEAP_BUF.as_ptr() as usize;
            let mut start = HEAP_CURSOR;
            let modulo = (ptr + start) & (layout.align() - 1);
            if modulo != 0 {
                start += layout.align() - modulo;
            }
            assert_eq!((ptr + start) & (layout.align() - 1), 0);
            let end = start + layout.size();
            let buf = HEAP_BUF.get_mut(start..end);
            HEAP_CURSOR = end;
            buf.map(|b| b.as_mut_ptr())
                .ok_or_else(|| AllocErr::Exhausted { request: layout })
        }
        unsafe fn dealloc(&mut self, _ptr: *mut u8, _layout: Layout) {}
    }

}

use self::dummy::MyHeap;