diff options
Diffstat (limited to 'src/RTree.hpp')
-rw-r--r-- | src/RTree.hpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/RTree.hpp b/src/RTree.hpp index da60a76f..45cbb378 100644 --- a/src/RTree.hpp +++ b/src/RTree.hpp @@ -32,6 +32,24 @@ #define Max std::max #endif //Max +namespace floormat::detail { +template<typename T> struct rtree_pool final +{ + rtree_pool(); + ~rtree_pool(); + static T* construct(); + static void free(T* pool); + +private: + static std::vector<T*> free_list; // NOLINT +}; + +#ifndef RTREE_NO_EXTERN_TEMPLATE_POOL +extern template struct rtree_pool<RTree<std::uint64_t, float, 2, float>::Node>; +extern template struct rtree_pool<RTree<std::uint64_t, float, 2, float>::ListNode>; +#endif +} // namespace floormat::detail + #ifdef RTREE_STDIO // Because there is not stream support, this is a quick and dirty file I/O helper. // Users will likely replace its usage with a Stream implementation from their favorite API. @@ -508,7 +526,7 @@ void RTREE_QUAL::RemoveAll() RTREE_TEMPLATE void RTREE_QUAL::Reset() { -#ifdef RTREE_DONT_USE_MEMPOOLS +#if defined RTREE_DONT_USE_MEMPOOLS || 1 // Delete all existing nodes RemoveAllRec(m_root); #else // RTREE_DONT_USE_MEMPOOLS @@ -542,7 +560,7 @@ typename RTREE_QUAL::Node* RTREE_QUAL::AllocNode() #ifdef RTREE_DONT_USE_MEMPOOLS newNode = new Node; #else // RTREE_DONT_USE_MEMPOOLS - // EXAMPLE + newNode = floormat::detail::rtree_pool<Node>::construct(); #endif // RTREE_DONT_USE_MEMPOOLS InitNode(newNode); return newNode; @@ -557,7 +575,7 @@ void RTREE_QUAL::FreeNode(Node* a_node) #ifdef RTREE_DONT_USE_MEMPOOLS delete a_node; #else // RTREE_DONT_USE_MEMPOOLS - // EXAMPLE + floormat::detail::rtree_pool<Node>::free(a_node); #endif // RTREE_DONT_USE_MEMPOOLS } @@ -570,7 +588,7 @@ typename RTREE_QUAL::ListNode* RTREE_QUAL::AllocListNode() #ifdef RTREE_DONT_USE_MEMPOOLS return new ListNode; #else // RTREE_DONT_USE_MEMPOOLS - // EXAMPLE + return floormat::detail::rtree_pool<ListNode>::construct(); #endif // RTREE_DONT_USE_MEMPOOLS } @@ -581,7 +599,7 @@ void RTREE_QUAL::FreeListNode(ListNode* a_listNode) #ifdef RTREE_DONT_USE_MEMPOOLS delete a_listNode; #else // RTREE_DONT_USE_MEMPOOLS - // EXAMPLE + floormat::detail::rtree_pool<ListNode>::free(a_listNode); #endif // RTREE_DONT_USE_MEMPOOLS } |