/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2015 Danny Robson */ #pragma once #include "../view.hpp" #include namespace cruft::alloc { /// a raw memory allocator which initialises an instance of PrefixT /// immediately before each allocation and, if specified, an instance /// of SuffixT after the allocation. /// /// uses an instance of ParentT to actually perform the bulk allocations. /// /// useful for sentinels, reference counts, etc. template class affix { template cruft::view allocate (size_t bytes); template cruft::view allocate (size_t bytes, size_t align); template void deallocate (cruft::view); std::byte* begin (void); const std::byte* begin (void) const; std::byte* end (void); const std::byte* end (void) const; size_t offset (const void*) const; }; }