Files
EgtGeomKernel/IdManager.h
T
Dario Sassi 88cce87eab EgtGeomKernel 1.9k3 :
- for each (.. in ..) sostituito da for ( .. : ..) vero costrutto C++.
2018-11-28 16:55:29 +00:00

71 lines
2.4 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2013-2013
//----------------------------------------------------------------------------
// File : IdManager.h Data : 02.12.13 Versione : 1.4a3
// Contenuto : Dichiarazione e implementazione della classe IdManager.
//
//
//
// Modifiche : 02.12.13 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include <unordered_map>
#include <algorithm>
//----------------------------------------------------------------------------
class IdManager
{
public :
IdManager( void)
: m_nMaxId( 0) {}
bool Init( int nBuckets)
{ m_GdbIdMap.rehash( nBuckets) ; return true ; }
bool Clear( void)
{ m_GdbIdMap.clear() ; m_nMaxId = 0 ; return true ; }
GdbObj* FindObj( int nId)
{ auto Iter = m_GdbIdMap.find( nId) ;
if ( Iter != m_GdbIdMap.end())
return Iter->second ;
else
return nullptr ; }
const GdbObj* FindObj( int nId) const
{ auto Iter = m_GdbIdMap.find( nId) ;
if ( Iter != m_GdbIdMap.end())
return Iter->second ;
else
return nullptr ; }
bool AddObj( int nId, GdbObj* pGObj)
{ if ( nId > m_nMaxId)
m_nMaxId = nId ;
return m_GdbIdMap.emplace( nId, pGObj).second ; }
bool RemoveObj( int nId)
{ m_GdbIdMap.erase( nId) ;
if ( nId == m_nMaxId && m_nMaxId > 0)
UpdateMaxId() ;
return true ; }
int GetNewId( void) const
{ return ( m_nMaxId + 1) ; }
int GetMaxId( void) const
{ return m_nMaxId ; }
void UpdateMaxId( int nId)
{ if ( nId > m_nMaxId)
m_nMaxId = nId ; }
void UpdateMaxId( void)
{ int nMaxId = 0 ;
for (const auto& Igdbo : m_GdbIdMap)
nMaxId = std::max( nMaxId, Igdbo.first) ;
m_nMaxId = nMaxId ; }
private :
typedef std::unordered_map< int, GdbObj*> INTPGDBO_UMAP ;
private :
int m_nMaxId ;
INTPGDBO_UMAP m_GdbIdMap ; // map basato sugli identificatori
} ;