blob: f19ec21600a1b6f489e3652b81e4d7fe64e2a192 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#pragma once
#include "handle.hpp"
//#include "handle-pool.inl"
#include "compat/assert.hpp"
namespace floormat::impl_handle {
template<typename Obj, uint32_t PageSize>
const Obj& Handle<Obj, PageSize>::get() const
{
return get_from_pool(index, counter).object;
}
template<typename Obj, uint32_t PageSize>
Obj& Handle<Obj, PageSize>::get()
{
return get_from_pool(index, counter).object;
}
template<typename Obj, uint32_t PageSize>
Item<Obj, PageSize>& Handle<Obj, PageSize>::get_from_pool(uint32_t index, uint32_t counter)
{
auto page_idx = index / PageSize;
auto obj_idx = index % PageSize;
fm_assert(Pool<Obj, PageSize>::pages.size() < page_idx);
auto& page = Pool<Obj, PageSize>::pages.data()[page_idx];
auto& item = page->storage[obj_idx];
fm_debug_assert(page.used_map[obj_idx]);
fm_assert(item.handle.counter == counter);
fm_debug_assert(item.handle == index + page.start_index);
return item.object;
}
} // namespace floormat::impl_handle
namespace floormat {
} // namespace floormat
|