Report a bug
		
				If you spot a problem with this page, click here to create a Bugzilla issue.
		
			Improve this page
		
			Quickly fork, edit online, and submit a pull request for this page.
			Requires a signed-in GitHub account. This works well for small changes.
			If you'd like to make larger changes you may want to consider using
			a local clone.
		
	std.experimental.allocator.building_blocks.fallback_allocator
- structFallbackAllocator(Primary, Fallback);
- FallbackAllocatoris the allocator equivalent of an "or" operator in algebra. An allocation request is first attempted with the Primary allocator. If that returns- null, the request is forwarded to the Fallback allocator. All other requests are dispatched appropriately to one of the two allocators.In order to work,- FallbackAllocatorrequires that Primary defines the owns method. This is needed in order to decide which allocator was responsible for a given allocation.- FallbackAllocatoris useful for fast, special-purpose allocators backed up by general-purpose allocators. The example below features a stack region backed up by the GCAllocator.- Primaryprimary;
- Theprimaryallocator.
- Fallbackfallback;
- Thefallbackallocator.
- static FallbackAllocatorinstance;
- If both Primary and Fallback are stateless, FallbackAllocator defines a staticinstancecalledinstance.
- enum uintalignment;
- Thealignmentoffered is the minimum of the two allocators'alignment.
- void[]allocate(size_ts);
- Allocates memory trying the primary allocator first. If it returnsnull, the fallback allocator is tried.
- void[]alignedAllocate(size_ts, uinta);
- FallbackAllocator offersalignedAllocateiff at least one of the allocators also offers it. It attempts to allocate using either or both.
- boolexpand(ref void[]b, size_tdelta);
- expandis defined if and only if at least one of the allocators defines- expand. It works as follows. If primary.owns(- b), then the request is forwarded to primary.- expandif it is defined, or fails (returning- false) otherwise. If primary does not own- b, then the request is forwarded to fallback.- expandif it is defined, or fails (returning- false) otherwise.
- boolreallocate(ref void[]b, size_tnewSize);
- reallocateworks as follows. If primary.owns(- b), then primary.- reallocate(- b,- newSize) is attempted. If it fails, an attempt is made to move the allocation from primary to fallback.If primary does not own- b, then fallback.- reallocate(- b,- newSize) is attempted. If that fails, an attempt is made to move the allocation from fallback to primary.
- Ternaryowns(void[]b);
- ownsis defined if and only if both allocators define- owns. Returns primary.- owns(- b) | fallback.- owns(- b).
- TernaryresolveInternalPointer(const void*p, ref void[]result);
- resolveInternalPointeris defined if and only if both allocators define it.
- booldeallocate(void[]b);
- deallocateis defined if and only if at least one of the allocators define- deallocate. It works as follows. If primary.owns(- b), then the request is forwarded to primary.- deallocateif it is defined, or is a no-op otherwise. If primary does not own- b, then the request is forwarded to fallback.- deallocateif it is defined, or is a no-op otherwise.
- Ternaryempty();
- emptyis defined if both allocators also define it.Returns:primary.- empty& fallback.- empty
 
- FallbackAllocator!(Primary, Fallback)fallbackAllocator(Primary, Fallback)(auto ref Primaryp, auto ref Fallbackf);
- Convenience function that uses type deduction to return the appropriate FallbackAllocator instance. To initialize with allocators that don't have state, use their it static member.Examples:import std.experimental.allocator.building_blocks.region : Region; import std.experimental.allocator.gc_allocator : GCAllocator; import std.typecons : Ternary; auto a = fallbackAllocator(Region!GCAllocator(1024), GCAllocator.instance); auto b1 = a.allocate(1020); writeln(b1.length); // 1020 writeln(a.primary.owns(b1)); // Ternary.yes auto b2 = a.allocate(10); writeln(b2.length); // 10 writeln(a.primary.owns(b2)); // Ternary.no 
Copyright © 1999-2017 by the D Language Foundation | Page generated by
Ddoc on (no date time)