From 813910578169b9cb8aa49554834d130a92b25865 Mon Sep 17 00:00:00 2001 From: Igor Novikov Date: Sun, 10 Dec 2017 03:17:12 +0500 Subject: [PATCH] Revert some changes and add new one. --- src/xrCore/FixedMap.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/xrCore/FixedMap.h b/src/xrCore/FixedMap.h index 111d77e6785..b3f3657692a 100644 --- a/src/xrCore/FixedMap.h +++ b/src/xrCore/FixedMap.h @@ -16,13 +16,6 @@ class FixedMAP K key; T val; TNode *left, *right; - - TNode() : key(), val(), left(nullptr), right(nullptr) {} - - static void *operator new (size_t size) { return allocator::alloc(size); } - static void *operator new[](size_t size) { return allocator::alloc(size); } - static void operator delete (void *block) { allocator::dealloc(block); } - static void operator delete[](void *block) { allocator::dealloc(block); } }; typedef void __fastcall callback(TNode*); typedef bool __fastcall callback_cmp(TNode& N1, TNode& N2); @@ -32,14 +25,15 @@ class FixedMAP u32 pool; u32 limit; - IC u32 Size(u32 Count) { return Count * sizeof(TNode); } void Realloc() { u32 newLimit = limit + SG_REALLOC_ADVANCE; VERIFY(newLimit % SG_REALLOC_ADVANCE == 0); - TNode* newNodes = new TNode[newLimit]; + TNode* newNodes = (TNode*)allocator::alloc(sizeof(TNode) * newLimit); VERIFY(newNodes); + for (TNode* cur = newNodes + limit; cur != newNodes + newLimit; cur++) + new(cur) TNode(); if (limit) std::copy(nodes, nodes + limit, newNodes); @@ -61,7 +55,7 @@ class FixedMAP } } if (nodes) - delete[] nodes; + allocator::dealloc(nodes); nodes = newNodes; limit = newLimit; @@ -145,7 +139,11 @@ class FixedMAP void destroy() { if (nodes) - delete[] nodes; + { + for (TNode* cur = begin(); cur != end(); cur++) + cur->~TNode(); + allocator::dealloc(nodes); + } nodes = 0; pool = 0; limit = 0;