//---------------------------------------------------------------------------- // 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 //---------------------------------------------------------------------------- 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) { INTPGDBO_UMAP::iterator 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) ; 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) -- m_nMaxId ; 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 ; } private : typedef std::unordered_map< int, GdbObj*> INTPGDBO_UMAP ; private : int m_nMaxId ; INTPGDBO_UMAP m_GdbIdMap ; // map basato sugli identificatori } ;