Utility and ancillary artifacts of std.experimental.allocator
. This module shouldn't be used directly; its functionality will be migrated into more appropriate parts of std
.
Ternary
) Returns the size in bytes of the state that needs to be allocated to hold an object of type T
. stateSize!T
is zero for struct
s that are not nested and have no nonstatic member variables.
Returns true
if the Allocator
has the alignment known at compile time; otherwise it returns false
.
chooseAtRuntime
is a compile-time constant of type size_t
that several parameterized structures in this module recognize to mean deferral to runtime of the exact value. For example, BitmappedBlock!(Allocator, 4096)
(described in detail below) defines a block allocator with block size of 4096 bytes, whereas BitmappedBlock!(Allocator, chooseAtRuntime)
defines a block allocator that has a field storing the block size, initialized by the user.
unbounded
is a compile-time constant of type size_t
that several parameterized structures in this module recognize to mean "infinite" bounds for the parameter. For example, Freelist
(described in detail below) accepts a maxNodes
parameter limiting the number of freelist items. If unbounded
is passed for maxNodes
, then there is no limit and no checking for the number of nodes.
The alignment that is guaranteed to accommodate any D object allocation on the current platform.
The default good size allocation is deduced as n
rounded up to the allocator's alignment.
The default reallocate
function first attempts to use expand
. If Allocator.expand
is not defined or returns false
, reallocate
allocates a new block of memory of appropriate size and copies data from the old block to the new block. Finally, if Allocator
defines deallocate
, reallocate
uses it to free the old memory block.
reallocate
does not attempt to use Allocator.reallocate
even if defined. This is deliberate so allocators may use it internally within their own implementation of reallocate
.
The default alignedReallocate
function first attempts to use expand
. If Allocator.expand
is not defined or returns false
, alignedReallocate
allocates a new block of memory of appropriate size and copies data from the old block to the new block. Finally, if Allocator
defines deallocate
, alignedReallocate
uses it to free the old memory block.
alignedReallocate
does not attempt to use Allocator.reallocate
even if defined. This is deliberate so allocators may use it internally within their own implementation of reallocate
.
Forwards each of the methods in funs
(if defined) to member
.
© 1999–2019 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_experimental_allocator_common.html