//---------------------------------------------------------------------------- // EgalTech 2013-2013 //---------------------------------------------------------------------------- // File : GdbGroup.cpp Data : 28.11.13 Versione : 1.4a2 // Contenuto : Implementazione della classe GdbGroup. // // // // Modifiche : 28.11.13 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "\EgtDev\Include\EGnStringUtils.h" #include "GdbGroup.h" using namespace std ; //---------------------------------------------------------------------------- GdbGroup::GdbGroup( void) { m_nNodeCount = 0 ; m_pFirstNode = nullptr ; m_pLastNode = nullptr ; } //---------------------------------------------------------------------------- GdbGroup::~GdbGroup( void) { Clear() ; } //---------------------------------------------------------------------------- bool GdbGroup::Clear( void) { GdbNode* pNode ; // disalloco gli oggetti pNode = GetFirstNode() ; while ( pNode != nullptr) { // lo rimuovo dalla lista pNode->Remove() ; // lo disalloco delete pNode ; // passo al nuovo primo pNode = GetFirstNode() ; } return true ; } //---------------------------------------------------------------------------- GdbGroup* GdbGroup::Clone( int nId) const { GdbGroup* pGdbGroup ; const GdbNode* pNode ; GdbNode* pNewNode ; // alloco gruppo Gdb pGdbGroup = new(nothrow) GdbGroup ; if ( pGdbGroup == nullptr) return nullptr ; // copio dati oggetto Gdb pGdbGroup->m_nId = nId ; // ... // clono i nodi figli pNode = GetFirstNode() ; while ( pNode != nullptr) { // eseguo copia pNewNode = pNode->Clone( ++ nId) ; if ( pNewNode == nullptr) { delete pGdbGroup ; return nullptr ; } // lo inserisco nella lista dei figli if ( ! pNewNode->AddTail( pGdbGroup)) { delete pNewNode ; delete pGdbGroup ; return nullptr ; } // passo al prossimo nodo pNode = pNode->GetNext() ; } return pGdbGroup ; } //---------------------------------------------------------------------------- bool GdbGroup::Save( std::ostream& osOut) const { bool bOk = true ; // tipo entità osOut << GetKey() << endl ; // identificativi osOut << m_nId << "@" << GetParentId() << endl ; // altri parametri // TODO ... // lancio il salvataggio dei figli const GdbNode* pGdbNode = GetFirstNode() ; while ( pGdbNode != nullptr) { // oggetto geometrico if ( ! pGdbNode->Save( osOut)) bOk = false ; pGdbNode = pGdbNode->GetNext() ; } return bOk ; } //---------------------------------------------------------------------------- bool GdbGroup::Load( const string& sType, CScan& TheScanner, int& nParentId) { string sLine ; STRVECTOR vsParams ; // leggo la prossima linea if ( ! TheScanner.GetLine( sLine)) return false ; // la divido in parametri Tokenize( sLine, "@", vsParams) ; // 2 parametri : Id e ParentId if ( vsParams.size() != 2) return false ; // assegno l'identificativo if ( ! FromString( vsParams[0], m_nId)) return false ; // assegno l'Id del padre if ( ! FromString( vsParams[1], nParentId)) return false ; return true ; }