Pyrogenesis  trunk
Classes | Namespaces | Typedefs | Functions | Variables
unique_range.h File Reference
#include "lib/lib_api.h"
#include "lib/alignment.h"
#include "lib/sysdep/vm.h"
Include dependency graph for unique_range.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  UniqueRange
 

Namespaces

 std
 

Typedefs

typedef intptr_t IdxDeleter
 
typedef void(* UniqueRangeDeleter) (void *pointer, size_t size)
 

Functions

LIB_API void RegisterUniqueRangeDeleter (UniqueRangeDeleter deleter, volatile IdxDeleter *idxDeleter)
 register a deleter, returning its index within the table. More...
 
LIB_API NOTHROW_DECLARE void CallUniqueRangeDeleter (void *pointer, size_t size, IdxDeleter idxDeleter)
 
static void std::swap (UniqueRange &p1, UniqueRange &p2)
 
static void std::swap (UniqueRange &&p1, UniqueRange &p2)
 
static void std::swap (UniqueRange &p1, UniqueRange &&p2)
 
LIB_API UniqueRange AllocateAligned (size_t size, size_t alignment)
 
LIB_API UniqueRange AllocateVM (size_t size, vm::PageType pageSize=vm::kDefault, int prot=PROT_READ|PROT_WRITE)
 

Variables

static const IdxDeleter idxDeleterNone = 0
 

Typedef Documentation

typedef intptr_t IdxDeleter
typedef void(* UniqueRangeDeleter) (void *pointer, size_t size)

Function Documentation

LIB_API UniqueRange AllocateAligned ( size_t  size,
size_t  alignment 
)
LIB_API UniqueRange AllocateVM ( size_t  size,
vm::PageType  pageSize = vm::kDefault,
int  prot = PROT_READ|PROT_WRITE 
)
LIB_API NOTHROW_DECLARE void CallUniqueRangeDeleter ( void *  pointer,
size_t  size,
IdxDeleter  idxDeleter 
)
LIB_API void RegisterUniqueRangeDeleter ( UniqueRangeDeleter  deleter,
volatile IdxDeleter idxDeleter 
)

register a deleter, returning its index within the table.

Parameters
deleterfunction pointer. must be uniquely associated with the idxDeleter storage location.
idxDeleterlocation where to store the next available index. if it is already non-zero, skip the call to this function to avoid overhead.

thread-safe. idxDeleter is used for mutual exclusion between multiple callers for the same deleter. concurrent registration of different deleters is also safe due to atomic increments.

halts the program if more than allocationAlignment deleters are to be registered.

Variable Documentation

const IdxDeleter idxDeleterNone = 0
static