bit::memory
Classes
Stateless

A structure that encompasses functionality, but contains no internal nor external state (i.e. no data members). More...

Classes

class  bit::memory::aligned_allocator
 This stateless allocator performs all of its allocation calls using aligned memory invocations. More...
 
class  bit::memory::aligned_offset_allocator
 This stateless allocator performs all of its allocation calls using aligned memory invocations aligned to an offset. More...
 
class  bit::memory::malloc_allocator
 This stateless allocator performs all of its allocation calls using raw calls to 'malloc', and frees memory with 'free'. More...
 
class  bit::memory::new_allocator
 This stateless allocator performs all of its allocation calls using raw calls to 'new', and frees memory with 'delete'. More...
 
class  bit::memory::null_allocator
 An allocator that only ever serves nullptr. More...
 
class  bit::memory::aligned_block_allocator< DefaultBlockSize, BlockAlign, GrowthMultiplier >
 An allocator that allocates over-aligned memory. More...
 
class  bit::memory::malloc_block_allocator< DefaultBlockSize, GrowthMultiplier >
 A block allocator that wraps around raw calls to std::malloc and std::free. More...
 
class  bit::memory::new_block_allocator< DefaultBlockSize, GrowthMultiplier >
 A block allocator that wraps around calls to new and delete. More...
 
class  bit::memory::null_block_allocator
 A block allocator that only distributes null blocks. More...
 
class  bit::memory::static_block_allocator< BlockSize, Blocks, Align, Tag >
 This is a block allocator that distributes blocks of memory stored statically. More...
 
class  bit::memory::thread_local_block_allocator< BlockSize, Blocks, Align, Tag >
 This is a block allocator that distributes blocks of static memory that is local to the specific thread. More...
 
class  bit::memory::no_growth_multiplier
 A multiplier that doesn't actually grow. More...
 

Detailed Description

A structure that encompasses functionality, but contains no internal nor external state (i.e. no data members).

Two instances of the same type must always compare equal, and constructing/copying/moving instances must not affect or be affected by any external state.

Semantically, a single instance should be identical in every respect to any duplicates; which may allow a composition of multiple of the same Stateless object to be compressed into a single instance (either EBO inheritance or data member).

Requirements

Alternatively, the following state may be specified to override the determination of a concept.

Provided

the following expressions must be well-formed with the expected reproduceable side-effects:

S s1{}; // default ctor
S s2(s); // copy ctor
S s3(std::move(s1)); // move ctor
s1 = s2; // copy assignment
s2 = std::move(2); // move assignment
\code
\code
S::is_stateless

Type must be std::true_type