25 STATIC_CONST( RWPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 4 );
32 Uint32 m_data[RWPAGE_WORDS];
44 Uint32 m_first_free_page;
45 Uint32 m_current_page_no;
47 Uint16 m_current_first_free;
48 Uint16 m_current_ref_count;
55 void * getPtr(Uint32
i);
58 STATIC_CONST( WORDS_PER_PAGE = RWPage::RWPAGE_WORDS );
61 void handle_invalid_release(
Ptr<void>) ATTRIBUTE_NORETURN;
62 void handle_invalid_get_ptr(Uint32 i) ATTRIBUTE_NORETURN;
67 RWPool::getPtr(Uint32
i)
69 Uint32 page_no = i >> POOL_RECORD_BITS;
70 Uint32 page_idx = i & POOL_RECORD_MASK;
72 Uint32 *
record = page->m_data + page_idx;
73 Uint32 magic_val = * (record + m_record_info.m_offset_magic);
74 if (likely(magic_val == ~(Uint32)m_record_info.m_type_id))
78 handle_invalid_get_ptr(i);
86 Uint32 page_no = i >> POOL_RECORD_BITS;
87 Uint32 page_idx = i & POOL_RECORD_MASK;
88 RWPage * page = m_memroot + page_no;
89 Uint32 * record = page->m_data + page_idx;
90 Uint32 magic_val = * (record + ri.m_offset_magic);
91 if (likely(magic_val == ~(Uint32)ri.m_type_id))
95 handle_invalid_get_ptr(i);