stdx.allocator.common

Utility and ancillary artifacts of stdx.allocator. This module shouldn't be used directly; its functionality will be migrated into more appropriate parts of std.

Authors

, Timon Gehr (Ternary)

  • Declaration

    template stateSize(T)

    Returns the size in bytes of the state that needs to be allocated to hold an object of type . is zero for s that are not nested and have no nonstatic member variables.

  • Declaration

    enum auto hasStaticallyKnownAlignment(Allocator);

    Returns true if the Allocator has the alignment known at compile time; otherwise it returns false.

  • Declaration

    enum ulong chooseAtRuntime;

    is a compile-time constant of type that several parameterized structures in this module recognize to mean deferral to runtime of the exact value. For example, (described in detail below) defines a block allocator with block size of 4096 bytes, whereas defines a block allocator that has a field storing the block size, initialized by the user.

  • Declaration

    enum ulong unbounded;

    is a compile-time constant of type that several parameterized structures in this module recognize to mean "infinite" bounds for the parameter. For example, (described in detail below) accepts a parameter limiting the number of freelist items. If is passed for , then there is no limit and no checking for the number of nodes.

  • Declaration

    enum uint platformAlignment;

    The alignment that is guaranteed to accommodate any D object allocation on the current platform.

  • Declaration

    size_t goodAllocSize(A)(auto ref A a, size_t n);

    The default good size allocation is deduced as rounded up to the allocator's alignment.

  • Declaration

    package pure nothrow @nogc @safe size_t roundUpToMultipleOf(size_t s, uint base);

    Returns s rounded up to a multiple of base.

  • Declaration

    package pure nothrow @nogc @safe size_t roundUpToAlignment(size_t n, uint alignment);

    Returns n rounded up to a multiple of alignment, which must be a power of 2.

  • Declaration

    package pure nothrow @nogc @safe size_t roundDownToAlignment(size_t n, uint alignment);

    Returns n rounded down to a multiple of alignment, which must be a power of 2.

  • Declaration

    package pure nothrow @nogc void[] roundUpToAlignment(void[] b, uint a);

    Advances the beginning of b to start at alignment a. The resulting buffer may therefore be shorter. Returns the adjusted buffer, or null if obtaining a non-empty buffer is impossible.

  • Declaration

    package pure nothrow @nogc @safe size_t divideRoundUp(size_t a, size_t b);

    Like a / b but rounds the result up, not down.

  • Declaration

    package pure nothrow @nogc void[] roundStartToMultipleOf(void[] s, uint base);

    Returns s rounded up to a multiple of base.

  • Declaration

    package pure nothrow @nogc @safe size_t roundUpToPowerOf2(size_t s);

    Returns rounded up to the nearest power of 2.

  • Declaration

    package pure nothrow @nogc @safe uint trailingZeros(ulong x);

    Returns the number of trailing zeros of .

  • Declaration

    pure nothrow @nogc bool alignedAt(T)(T* ptr, uint alignment);

    Returns true if ptr is aligned at alignment.

  • Declaration

    package pure nothrow @nogc uint effectiveAlignment(void* ptr);

    Returns the effective alignment of ptr, i.e. the largest power of two that is a divisor of ptr.

  • Declaration

    package pure nothrow @nogc void* alignDownTo(void* ptr, uint alignment);

    Aligns a pointer down to a specified alignment. The resulting pointer is less than or equal to the given pointer.

  • Declaration

    package pure nothrow @nogc void* alignUpTo(void* ptr, uint alignment);

    Aligns a pointer up to a specified alignment. The resulting pointer is greater than or equal to the given pointer.

  • Declaration

    bool reallocate(Allocator)(ref Allocator a, ref void[] b, size_t s);

    The default function first attempts to use . If is not defined or returns , allocates a new block of memory of appropriate size and copies data from the old block to the new block. Finally, if defines , uses it to free the old memory block.

    Discussion

    does not attempt to use even if defined. This is deliberate so allocators may use it internally within their own implementation of .

  • Declaration

    bool alignedReallocate(Allocator)(ref Allocator alloc, ref void[] b, size_t s, uint a);

    The default function first attempts to use . If is not defined or returns , allocates a new block of memory of appropriate size and copies data from the old block to the new block. Finally, if defines , uses it to free the old memory block.

    Discussion

    does not attempt to use even if defined. This is deliberate so allocators may use it internally within their own implementation of .

  • Declaration

    string forwardToMember(string member, string[] funs...);

    Forwards each of the methods in funs (if defined) to member.