diff --git a/Bigfoot/Sources/Utils/Include/Utils/Containers/SlotMap.hpp b/Bigfoot/Sources/Utils/Include/Utils/Containers/SlotMap.hpp index 9ecdc52..aa21896 100644 --- a/Bigfoot/Sources/Utils/Include/Utils/Containers/SlotMap.hpp +++ b/Bigfoot/Sources/Utils/Include/Utils/Containers/SlotMap.hpp @@ -476,17 +476,20 @@ class StableSlotMap: public SlotMapBase { for (; p_pageIndex < m_map->m_pages.size(); ++p_pageIndex) { - const std::size_t offset = m_map->m_pages[p_pageIndex]->m_occupied.find_first(); + Page* const page = m_map->m_pages[p_pageIndex].get(); + const std::size_t offset = page->m_occupied.find_first(); if (offset != PAGE_SIZE) { m_pageIndex = p_pageIndex; + m_page = page; m_offset = offset; - m_current = m_map->m_pages[p_pageIndex]->SlotAt(offset); + m_current = page->SlotAt(offset); return; } } m_pageIndex = m_map->m_pages.size(); + m_page = nullptr; m_offset = 0; m_current = nullptr; } @@ -495,12 +498,14 @@ class StableSlotMap: public SlotMapBase { for (;;) { - const std::size_t offset = m_map->m_pages[p_pageIndex]->m_occupied.find_last(); + Page* const page = m_map->m_pages[p_pageIndex].get(); + const std::size_t offset = page->m_occupied.find_last(); if (offset != PAGE_SIZE) { m_pageIndex = p_pageIndex; + m_page = page; m_offset = offset; - m_current = m_map->m_pages[p_pageIndex]->SlotAt(offset); + m_current = page->SlotAt(offset); return; } @@ -514,11 +519,11 @@ class StableSlotMap: public SlotMapBase void Advance() { - const std::size_t offset = m_map->m_pages[m_pageIndex]->m_occupied.find_next(m_offset); + const std::size_t offset = m_page->m_occupied.find_next(m_offset); if (offset != PAGE_SIZE) { m_offset = offset; - m_current = m_map->m_pages[m_pageIndex]->SlotAt(offset); + m_current = m_page->SlotAt(offset); return; } @@ -533,11 +538,11 @@ class StableSlotMap: public SlotMapBase return; } - const std::size_t offset = m_map->m_pages[m_pageIndex]->m_occupied.find_prev(m_offset); + const std::size_t offset = m_page->m_occupied.find_prev(m_offset); if (offset != PAGE_SIZE) { m_offset = offset; - m_current = m_map->m_pages[m_pageIndex]->SlotAt(offset); + m_current = m_page->SlotAt(offset); return; } @@ -549,6 +554,7 @@ class StableSlotMap: public SlotMapBase } StableSlotMap* m_map = nullptr; + Page* m_page = nullptr; std::size_t m_pageIndex = 0; std::size_t m_offset = 0; TYPE* m_current = nullptr; @@ -621,17 +627,20 @@ class StableSlotMap: public SlotMapBase { for (; p_pageIndex < m_map->m_pages.size(); ++p_pageIndex) { - const std::size_t offset = m_map->m_pages[p_pageIndex]->m_occupied.find_first(); + const Page* const page = m_map->m_pages[p_pageIndex].get(); + const std::size_t offset = page->m_occupied.find_first(); if (offset != PAGE_SIZE) { m_pageIndex = p_pageIndex; + m_page = page; m_offset = offset; - m_current = m_map->m_pages[p_pageIndex]->SlotAt(offset); + m_current = page->SlotAt(offset); return; } } m_pageIndex = m_map->m_pages.size(); + m_page = nullptr; m_offset = 0; m_current = nullptr; } @@ -640,12 +649,14 @@ class StableSlotMap: public SlotMapBase { for (;;) { - const std::size_t offset = m_map->m_pages[p_pageIndex]->m_occupied.find_last(); + const Page* const page = m_map->m_pages[p_pageIndex].get(); + const std::size_t offset = page->m_occupied.find_last(); if (offset != PAGE_SIZE) { m_pageIndex = p_pageIndex; + m_page = page; m_offset = offset; - m_current = m_map->m_pages[p_pageIndex]->SlotAt(offset); + m_current = page->SlotAt(offset); return; } @@ -659,11 +670,11 @@ class StableSlotMap: public SlotMapBase void Advance() { - const std::size_t offset = m_map->m_pages[m_pageIndex]->m_occupied.find_next(m_offset); + const std::size_t offset = m_page->m_occupied.find_next(m_offset); if (offset != PAGE_SIZE) { m_offset = offset; - m_current = m_map->m_pages[m_pageIndex]->SlotAt(offset); + m_current = m_page->SlotAt(offset); return; } @@ -678,11 +689,11 @@ class StableSlotMap: public SlotMapBase return; } - const std::size_t offset = m_map->m_pages[m_pageIndex]->m_occupied.find_prev(m_offset); + const std::size_t offset = m_page->m_occupied.find_prev(m_offset); if (offset != PAGE_SIZE) { m_offset = offset; - m_current = m_map->m_pages[m_pageIndex]->SlotAt(offset); + m_current = m_page->SlotAt(offset); return; } @@ -694,6 +705,7 @@ class StableSlotMap: public SlotMapBase } const StableSlotMap* m_map = nullptr; + const Page* m_page = nullptr; std::size_t m_pageIndex = 0; std::size_t m_offset = 0; const TYPE* m_current = nullptr;