From 94d2cb8315ad2deb3c4abd16129b004e91c204a0 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 23 Aug 2018 14:19:33 +0000 Subject: [PATCH] EgtGeomKernel 1.9h3 : - migliorata gestione aggiornamento IdMax alla cancellazione oggetti. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes GeomDB.cpp | 2 +- IdManager.h | 12 +++++++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index c93f99c3ea5def11448c20f4fe9a07371f7a4dda..764ec6359f4925d7d4fb9d7c9a4022339e23a7ca 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR delta 94 zcmdlNy)SyhFE&P_&A-_cnHh~HD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-Vf-5U diff --git a/GeomDB.cpp b/GeomDB.cpp index 3ace107..a0f0a49 100644 --- a/GeomDB.cpp +++ b/GeomDB.cpp @@ -81,7 +81,7 @@ GeomDB::Init( void) // pulizia Clear() ; // imposto numero minimo buckets del map degli Id - m_IdManager.Init( 1024) ; + m_IdManager.Init( 8192) ; // imposto materiale di default m_GrpRadix.SetMaterial( Color()) ; // imposto riferimento griglia standard diff --git a/IdManager.h b/IdManager.h index 6ad3591..c8b03ee 100644 --- a/IdManager.h +++ b/IdManager.h @@ -14,6 +14,7 @@ #pragma once #include +#include //---------------------------------------------------------------------------- @@ -27,13 +28,13 @@ class IdManager bool Clear( void) { m_GdbIdMap.clear() ; m_nMaxId = 0 ; return true ; } GdbObj* FindObj( int nId) - { INTPGDBO_UMAP::iterator Iter = m_GdbIdMap.find( nId) ; + { auto Iter = m_GdbIdMap.find( nId) ; if ( Iter != m_GdbIdMap.end()) return Iter->second ; else return nullptr ; } const GdbObj* FindObj( int nId) const - { INTPGDBO_UMAP::const_iterator Iter = m_GdbIdMap.find( nId) ; + { auto Iter = m_GdbIdMap.find( nId) ; if ( Iter != m_GdbIdMap.end()) return Iter->second ; else @@ -45,7 +46,7 @@ class IdManager bool RemoveObj( int nId) { m_GdbIdMap.erase( nId) ; if ( nId == m_nMaxId && m_nMaxId > 0) - -- m_nMaxId ; + UpdateMaxId() ; return true ; } int GetNewId( void) const { return ( m_nMaxId + 1) ; } @@ -54,6 +55,11 @@ class IdManager void UpdateMaxId( int nId) { if ( nId > m_nMaxId) m_nMaxId = nId ; } + void UpdateMaxId( void) + { int nMaxId = 0 ; + for each (const auto& Igdbo in m_GdbIdMap) + nMaxId = std::max( nMaxId, Igdbo.first) ; + m_nMaxId = nMaxId ; } private : typedef std::unordered_map< int, GdbObj*> INTPGDBO_UMAP ;