/* * 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 <danny@nerdcruft.net> */ #pragma once #include "../view.hpp" #include <cstddef> 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 ParentT, class PrefixT, class SuffixT> class affix { template <typename T> cruft::view<T*> allocate (size_t bytes); template <typename T> cruft::view<T*> allocate (size_t bytes, size_t align); template <typename T> void deallocate (cruft::view<std::byte*>); 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; }; }