EgtGeomKernel 1.4a2 : Aggiunti gruppi per avere struttura DB ad albero.
This commit is contained in:
+162
@@ -0,0 +1,162 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2013-2013
|
||||
//----------------------------------------------------------------------------
|
||||
// File : GdbNode.cpp Data : 28.11.13 Versione : 1.4a2
|
||||
// Contenuto : Implementazione della classe GdbNode.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 28.11.13 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "GdbNode.h"
|
||||
#include "GdbGroup.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
GdbNode::GdbNode( void)
|
||||
{
|
||||
m_nId = - 1 ;
|
||||
m_pNext = nullptr ;
|
||||
m_pPrev = nullptr ;
|
||||
m_pParent = nullptr ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
GdbNode::GetParentId( void) const
|
||||
{
|
||||
if ( m_pParent != nullptr)
|
||||
return m_pParent->m_nId ;
|
||||
else
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbNode::AddTail( GdbGroup* pParent)
|
||||
{
|
||||
// se il padre non è definito, errore
|
||||
if ( pParent == nullptr)
|
||||
return false ;
|
||||
|
||||
// se non ci sono figli
|
||||
if ( pParent->m_pLastNode == nullptr) {
|
||||
pParent->m_pLastNode = this ;
|
||||
pParent->m_pFirstNode = this ;
|
||||
m_pParent = pParent ;
|
||||
m_pNext = nullptr ;
|
||||
m_pPrev = nullptr ;
|
||||
m_pParent->NodeCountInc() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
// caso standard
|
||||
return InsertAfter( pParent->m_pLastNode) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbNode::AddHead( GdbGroup* pParent)
|
||||
{
|
||||
// se il padre non è definito, errore
|
||||
if ( pParent == nullptr)
|
||||
return false ;
|
||||
|
||||
// se non ci sono figli
|
||||
if ( pParent->m_pFirstNode == nullptr) {
|
||||
pParent->m_pFirstNode = this ;
|
||||
pParent->m_pLastNode = this ;
|
||||
m_pParent = pParent ;
|
||||
m_pNext = nullptr ;
|
||||
m_pPrev = nullptr ;
|
||||
m_pParent->NodeCountInc() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
// caso standard
|
||||
return InsertBefore( pParent->m_pFirstNode) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbNode::InsertAfter( GdbNode* pRef)
|
||||
{
|
||||
// se riferimento non definito, errore
|
||||
if ( pRef == nullptr)
|
||||
return false ;
|
||||
|
||||
// sistemazione puntatori di elemento inserito
|
||||
m_pNext = pRef->m_pNext ;
|
||||
m_pPrev = pRef ;
|
||||
m_pParent = pRef->m_pParent ;
|
||||
// sistemazione puntatori di elemento di riferimento
|
||||
pRef->m_pNext = this ;
|
||||
// sistemazione puntatori di eventuale elemento successivo
|
||||
if ( m_pNext != nullptr)
|
||||
m_pNext->m_pPrev = this ;
|
||||
// sistemazione dell'eventuale padre
|
||||
if ( m_pParent != nullptr) {
|
||||
// se nuovo ultimo nodo
|
||||
if ( m_pParent->m_pLastNode == pRef)
|
||||
m_pParent->m_pLastNode = this ;
|
||||
m_pParent->NodeCountInc() ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbNode::InsertBefore( GdbNode* pRef)
|
||||
{
|
||||
// se riferimento non definito, errore
|
||||
if ( pRef == nullptr)
|
||||
return false ;
|
||||
|
||||
// sistemazione puntatori di elemento inserito
|
||||
m_pNext = pRef ;
|
||||
m_pPrev = pRef->m_pPrev ;
|
||||
m_pParent = pRef->m_pParent ;
|
||||
// sistemazione puntatori di elemento corrente
|
||||
pRef->m_pPrev = this ;
|
||||
// sistemazione puntatori di eventuale elemento precedente
|
||||
if ( m_pPrev != nullptr)
|
||||
m_pPrev->m_pNext = this ;
|
||||
// sistemazione dell'eventuale padre
|
||||
if ( m_pParent != nullptr) {
|
||||
// se nuovo primo nodo
|
||||
if ( m_pParent->m_pFirstNode == pRef)
|
||||
m_pParent->m_pFirstNode = this ;
|
||||
m_pParent->NodeCountInc() ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
bool
|
||||
GdbNode::Remove( void)
|
||||
{
|
||||
// sistemazione dell'eventuale padre
|
||||
if ( m_pParent != nullptr) {
|
||||
if ( m_pParent->m_pFirstNode == this)
|
||||
m_pParent->m_pFirstNode = m_pNext ;
|
||||
if ( m_pParent->m_pLastNode == this)
|
||||
m_pParent->m_pLastNode = m_pPrev ;
|
||||
m_pParent->NodeCountDec() ;
|
||||
}
|
||||
// sistemazione di eventuale precedente
|
||||
if ( m_pPrev != nullptr)
|
||||
m_pPrev->m_pNext = m_pNext ;
|
||||
// sistemazione di eventuale successivo
|
||||
if ( m_pNext != nullptr)
|
||||
m_pNext->m_pPrev = m_pPrev ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user