20#ifndef REALM_DYNAMIC_TABLE_H
21#define REALM_DYNAMIC_TABLE_H
32 template <
typename LT,
typename IT>
45 template <
typename ET,
size_t _SIZE,
typename LT,
typename IT>
48 static const size_t SIZE = _SIZE;
56 template <
typename ALLOCATOR>
59 template <
typename ET>
61 void construct(ET *storage,
ID id,
unsigned owner)
const { storage->init(
id, owner); }
64 template <
typename ALLOCATOR>
67 typedef typename ALLOCATOR::IT
IT;
68 typedef typename ALLOCATOR::ET
ET;
69 typedef typename ALLOCATOR::LT
LT;
80 ET **free_list_tail = 0);
86 ET **free_list_head,
ET **free_list_tail);
104 template <
typename ALLOCATOR>
107 typedef typename ALLOCATOR::IT
IT;
108 typedef typename ALLOCATOR::ET
ET;
109 typedef typename ALLOCATOR::LT
LT;
136 template <
typename _ET,
size_t _INNER_BITS,
size_t _LEAF_BITS,
162 ET **free_list_head,
ET **free_list_tail,
168#include "realm/dynamic_table.inl"
Definition dynamic_table.h:138
Mutex LT
Definition dynamic_table.h:145
static ET * steal_freelist_element(FreeList *requestor=nullptr)
static std::vector< FreeList * > & get_registered_freelists(Mutex *&lock)
static void register_freelist(FreeList *free_list)
DynamicTableNode< atomic< DynamicTableNodeBase< LT, IT > * >, 1<< INNER_BITS, LT, IT > INNER_TYPE
Definition dynamic_table.h:149
static const size_t INNER_BITS
Definition dynamic_table.h:141
DynamicTableFreeList< DynamicTableAllocator< ET, _INNER_BITS, _LEAF_BITS, Constructor > > FreeList
Definition dynamic_table.h:153
_ET ET
Definition dynamic_table.h:140
static LEAF_TYPE * new_leaf_node(IT first_index, IT last_index, int owner, ET **free_list_head, ET **free_list_tail, const Constructor &elem_ctor_obj)
DynamicTableNode< ET, 1<< LEAF_BITS, LT, IT > LEAF_TYPE
Definition dynamic_table.h:150
CONSTRUCTOR Constructor
Definition dynamic_table.h:144
ID::IDType IT
Definition dynamic_table.h:146
static const size_t LEAF_BITS
Definition dynamic_table.h:142
Definition dynamic_table.h:105
int owner
Definition dynamic_table.h:130
ALLOCATOR::IT IT
Definition dynamic_table.h:107
IT next_alloc
Definition dynamic_table.h:133
LT lock
Definition dynamic_table.h:131
DynamicTable< ALLOCATOR > & table
Definition dynamic_table.h:127
ALLOCATOR::ET ET
Definition dynamic_table.h:108
ALLOCATOR::LT LT
Definition dynamic_table.h:109
atomic< ET * > first_free
Definition dynamic_table.h:132
void alloc_range(int requested, IT &first_id, IT &last_id)
void free_entry(ET *entry)
DynamicTableFreeList(DynamicTable< ALLOCATOR > &_table, int _owner, DynamicTableFreeList< ALLOCATOR > *_parent_list=nullptr)
ET * pop_front_underlock(void)
DynamicTableFreeList< ALLOCATOR > * parent_list
Definition dynamic_table.h:129
void push_front(ET *head, ET *tail)
void push_front(ET *entry)
Definition dynamic_table.h:65
ALLOCATOR::LT LT
Definition dynamic_table.h:69
typename ALLOCATOR::Constructor Constructor
Definition dynamic_table.h:71
size_t max_entries(void) const
Constructor elem_ctor
Definition dynamic_table.h:99
ALLOCATOR::ET ET
Definition dynamic_table.h:68
static intptr_t encode_root_and_level(NodeBase *root, int level)
ET * lookup_entry(IT index, int owner, ET **free_list_head=0, ET **free_list_tail=0)
static int extract_level(intptr_t rlval)
DynamicTableNodeBase< LT, IT > NodeBase
Definition dynamic_table.h:70
atomic< NodeBase * > first_alloced_node
Definition dynamic_table.h:98
void set_constructor(Constructor &_elem_ctor)
static NodeBase * extract_root(intptr_t rlval)
DynamicTable(Constructor elem_ctor)
ALLOCATOR::IT IT
Definition dynamic_table.h:67
bool has_entry(IT index) const
void prepend_alloced_node(NodeBase *new_node)
atomic< intptr_t > root_and_level
Definition dynamic_table.h:92
LT lock
Definition dynamic_table.h:89
NodeBase * new_tree_node(int level, IT first_index, IT last_index, int owner, ET **free_list_head, ET **free_list_tail)
::realm_id_t IDType
Definition id.h:32
Definition activemsg.h:38
Definition dynamic_table.h:60
void construct(ET *storage, ID id, unsigned owner) const
Definition dynamic_table.h:61
Definition dynamic_table.h:33
virtual ~DynamicTableNodeBase(void)
LT lock
Definition dynamic_table.h:40
IT first_index
Definition dynamic_table.h:39
IT last_index
Definition dynamic_table.h:39
DynamicTableNodeBase(int _level, IT _first_index, IT _last_index)
int level
Definition dynamic_table.h:38
DynamicTableNodeBase< LT, IT > * next_alloced_node
Definition dynamic_table.h:42
Definition dynamic_table.h:46
virtual ~DynamicTableNode(void)
DynamicTableNode(int _level, IT _first_index, IT _last_index)
ET elems[SIZE]
Definition dynamic_table.h:53
static const size_t SIZE
Definition dynamic_table.h:48