allocator_traits< iteration_allocator< N, BlockAllocator > > Class Template Reference
Allocator implementations

## Detailed Description

template<std::size_t N, class BlockAllocator>
class foonathan::memory::allocator_traits< iteration_allocator< N, BlockAllocator > >

Specialization of the allocator_traits for iteration_allocator.

Note
  It is not allowed to mix calls through the specialization and through the member functions, i.e. memory_stack::allocate() and this `allocate_node()`.

## Typedefs

using | allocator_type = iteration_allocator< N, BlockAllocator >
using | is_stateful = std::true_type

## Static Functions

static void * | allocate_node (allocator_type &state, std::size_t size, std::size_t alignment)
static void * | allocate_array (allocator_type &state, std::size_t count, std::size_t size, std::size_t alignment)
static std::size_t | max_alignment (const allocator_type &) noexcept
static void | deallocate_node (allocator_type &, void *, std::size_t, std::size_t) noexcept
static void | deallocate_array (allocator_type &, void *, std::size_t, std::size_t, std::size_t) noexcept
static std::size_t | max_node_size (const allocator_type &state) noexcept
static std::size_t | max_array_size (const allocator_type &state) noexcept

## Member Functions

## allocate_node()

template<std::size_t N, class BlockAllocator >

static void * allocate_node | ( | allocator_type & | state,
|  | std::size_t | size,
|  | std::size_t | alignment
| ) |  |

static

Returns:
  The result of iteration_allocator::allocate().

## allocate_array()

template<std::size_t N, class BlockAllocator >

static void * allocate_array | ( | allocator_type & | state,
|  | std::size_t | count,
|  | std::size_t | size,
|  | std::size_t | alignment
| ) |  |

static

Returns:
  The result of memory_stack::allocate().

## deallocate_node()

template<std::size_t N, class BlockAllocator >

static void deallocate_node | ( | allocator_type & | ,
|  | void * | ,
|  | std::size_t | ,
|  | std::size_t |
| ) |  |

static noexcept

Effects:
  Does nothing. Actual deallocation can only be done via memory_stack::unwind().

## deallocate_array()

template<std::size_t N, class BlockAllocator >

static void deallocate_array | ( | allocator_type & | ,
|  | void * | ,
|  | std::size_t | ,
|  | std::size_t | ,
|  | std::size_t |
| ) |  |

static noexcept

Effects:
  Does nothing. Actual deallocation can only be done via memory_stack::unwind().

## max_node_size()

template<std::size_t N, class BlockAllocator >

static std::size_t max_node_size | ( | const allocator_type & | state | ) |

static noexcept

Returns:
  The maximum size which is iteration_allocator::capacity_left().

## max_array_size()

template<std::size_t N, class BlockAllocator >

static std::size_t max_array_size | ( | const allocator_type & | state | ) |

static noexcept

Returns:
  The maximum size which is iteration_allocator::capacity_left().

## max_alignment()

template<std::size_t N, class BlockAllocator >

static std::size_t max_alignment | ( | const allocator_type & |  | ) |

static noexcept

Returns:
  The maximum possible value since there is no alignment restriction (except indirectly through memory_stack::next_capacity()).