summaryrefslogtreecommitdiffhomepage
path: root/src/handle.inl
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