Show
Ignore:
Timestamp:
04/02/08 14:18:07 (8 months ago)
Author:
cneumann
Message:

replaced pointer field implementation
split FieldContainer/Fields? directory into Base and Handle subdir

Status: - ref counting seems to work (mt, cluster)

  • new OSB loader works (well, the unittest does)
  • VRML loader is deactivated
  • get/edit handle for dynamic (pointer) fields missing
  • need to remove some more old files - they get moved in this commit
  • generated (i.e. base) code in following commit
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/Carsten_PtrWork2/Source/System/FieldContainer/Base/OSGChangeList.cpp

    r1057 r1072  
    6060OSG_USING_NAMESPACE 
    6161 
    62 //#define SILENT 
    63 //#define SILENT_CPTR 
     62#define SILENT 
     63#define SILENT_CPTR 
    6464 
    6565#if 1 
    6666void 
    67 ChangeList::addAddExternalRef(UInt32 const uiContainerId) 
     67ChangeList::addAddReference(UInt32 const uiContainerId) 
    6868{ 
    6969#ifdef OSG_ENABLE_VALGRIND_CHECKS 
     
    7272 
    7373#ifndef SILENT 
    74     fprintf(stderr, "ChangeList::addAddExternalRef, id [%u] aspect [%u]\n", 
     74    fprintf(stderr, "ChangeList::addAddReference, id [%u] aspect [%u]\n", 
    7575            uiContainerId, Thread::getCurrentAspect()); 
    7676#endif 
     
    7878    ContainerChangeEntry *pEntry = getNewEntry(); 
    7979     
    80     pEntry->uiEntryDesc   = ContainerChangeEntry::AddExternalReference; 
     80    pEntry->uiEntryDesc   = ContainerChangeEntry::AddReference; 
    8181    pEntry->uiContainerId = uiContainerId; 
    8282} 
    8383 
    8484void 
    85 ChangeList::addSubExternalRef(UInt32 const uiContainerId) 
     85ChangeList::addSubReference(UInt32 const uiContainerId) 
    8686{ 
    8787#ifdef OSG_ENABLE_VALGRIND_CHECKS 
     
    9090 
    9191#ifndef SILENT 
    92     fprintf(stderr, "ChangeList::addSubExternalRef, id [%u] aspect [%u]\n", 
     92    fprintf(stderr, "ChangeList::addSubReference, id [%u] aspect [%u]\n", 
    9393            uiContainerId, Thread::getCurrentAspect()); 
    9494#endif 
     
    9696    ContainerChangeEntry *pEntry = getNewEntry(); 
    9797     
    98     pEntry->uiEntryDesc   = ContainerChangeEntry::SubExternalReference; 
     98    pEntry->uiEntryDesc   = ContainerChangeEntry::SubReference; 
    9999    pEntry->uiContainerId = uiContainerId; 
    100100} 
     
    108108 
    109109#ifndef SILENT 
    110     fprintf(stderr, "Add create, id [%u] aspect [%u]\n", 
     110    fprintf(stderr, "ChangeList::addCreated, id [%u] aspect [%u]\n", 
    111111            uiContainerId, Thread::getCurrentAspect()); 
    112112#endif 
     
    121121{ 
    122122#ifndef SILENT 
    123     fprintf(stderr, "Added changed, id [%d] aspect [%u]\n", 
    124             pEntry->uiContainerId, Thread::getCurrentAspect()); 
     123    fprintf(stderr, "ChangeList::addUncommited, id [%d] aspect [%u] -- [0x%x] [0x%x]\n", 
     124            pEntry->uiContainerId, Thread::getCurrentAspect(), 
     125            pEntry->uiEntryDesc, pEntry->whichField); 
    125126#endif 
    126127    OSG_ASSERT(NULL != pEntry); 
     
    133134//BitVector ContainerChangeEntry::defaultVec = TypeTraits<BitVector>::BitsClear; 
    134135 
    135 void ContainerChangeEntry::commitChanges(void
     136void ContainerChangeEntry::commitChanges(FieldContainerPtr pObj
    136137{ 
    137138#ifdef OSG_ENABLE_VALGRIND_CHECKS 
    138139    VALGRIND_CHECK_VALUE_IS_DEFINED(uiContainerId); 
    139140#endif 
    140     FieldContainerPtr pTmp = 
    141         FieldContainerFactory::the()->getContainer(uiContainerId); 
    142  
    143     if(pTmp != NullFC) 
     141     
     142    if(pObj != NullFC) 
    144143    { 
    145144#ifndef SILENT 
    146         fprintf(stderr, "Commit for [%u] [%s]\n", 
    147                 uiContainerId, pTmp->getType().getCName()); 
     145        fprintf(stderr, "commitChanges for [%u] [%s]\n", 
     146                uiContainerId, pObj->getType().getCName()); 
    148147#endif 
    149148         
     
    159158           whichField            |= *bvUncommittedChanges; 
    160159           *bvUncommittedChanges  = TypeTraits<BitVector>::BitsClear; 
    161  
    162            pTmp->changed      (tmpChanges, ChangedOrigin::Commit, 0); 
     160            
     161#ifndef SILENT 
     162            fprintf(stderr, "commitChanges for [%u] [%s] -- [0x%x]\n", 
     163                    uiContainerId, pObj->getType().getCName(), 
     164                    whichField); 
     165#endif 
     166 
     167           pObj->changed      (tmpChanges, ChangedOrigin::Commit, 0); 
    163168        } 
    164169    } 
     
    314319            OSG_ASSERT(NULL != (*changesIt)); 
    315320             
    316             if((*changesIt)->uiEntryDesc == ContainerChangeEntry::Change) 
     321            FieldContainerPtr pObj = 
     322                FieldContainerFactory::the()->getContainer( 
     323                    (*changesIt)->uiContainerId); 
     324             
     325            if(0x0000 != ((*changesIt)->uiEntryDesc & 
     326                          ContainerChangeEntry::Change)) 
    317327            { 
    318                 ((*changesIt)->*func)(); 
     328                ((*changesIt)->*func)(pObj); 
     329            } 
     330             
     331            if(0x0000 != ((*changesIt)->uiEntryDesc & 
     332                          ContainerChangeEntry::ResolveCandidate)) 
     333            { 
     334                (*changesIt)->uiEntryDesc &= ~ContainerChangeEntry::ResolveCandidate; 
     335                 
     336                OSG_ASSERT(pObj != NULL); 
     337                 
     338                pObj->handleResolve(); 
     339            } 
     340             
     341            if(0x0000 != ((*changesIt)->uiEntryDesc &  
     342                          ContainerChangeEntry::DestroyCandidate)) 
     343            { 
     344                (*changesIt)->uiEntryDesc &= ~ContainerChangeEntry::DestroyCandidate; 
     345                 
     346                OSG_ASSERT(pObj != NULL); 
     347                 
     348                pObj->handleDestroyAspect(); 
    319349            } 
    320350             
     
    439469 
    440470#ifndef SILENT_CPTR 
    441         fprintf(stderr, "process changes for %d %p %s %p %s\n", 
     471        fprintf(stderr, "process changes for %d 0x%x %p %s %p %s\n", 
    442472                (*cIt)->uiContainerId, 
     473                (*cIt)->uiEntryDesc, 
    443474                pSrc, 
    444475                pSrc != NULL ? pSrc->getType().getCName() : "null", 
     
    460491 
    461492#ifndef SILENT_CPTR 
    462         fprintf(stderr, "Xprocess changes for %d %p %s %p %s | %d %d %p\n", 
     493        fprintf(stderr, "Xprocess changes for %d 0x%x %p %s %p %s | %d %d %p\n", 
    463494                (*cIt)->uiContainerId, 
     495                (*cIt)->uiEntryDesc, 
    464496                pSrc, 
    465497                pSrc != NULL ? pSrc->getType().getCName() : "null", 
     
    471503#endif 
    472504 
    473         if((*cIt)->uiEntryDesc == ContainerChangeEntry::Change) 
    474         { 
     505        if(0x0000 != ((*cIt)->uiEntryDesc & ContainerChangeEntry::Change)) 
     506        { 
     507#ifndef SILENT_CPTR 
     508            fprintf(stderr, "ChangeList::doApply: Change\n"); 
     509#endif 
     510         
    475511            if(pSrc != NULL && pDst != NULL) // be safe for now 
    476512            { 
     
    495531                                syncMode, 
    496532                                uiSInfo); 
    497  
    498                 if(bClear == true) 
    499                 { 
    500                     pSrc->clearChangeEntry(*cIt); 
    501                 } 
    502533            } 
    503534        } 
    504  
     535         
     536        if(0x0000 != ((*cIt)->uiEntryDesc & ContainerChangeEntry::AddReference)) 
     537        { 
     538#ifndef SILENT_CPTR 
     539            fprintf(stderr, "ChangeList::doApply: AddReference\n"); 
     540#endif 
     541            pDst->addReference(); 
     542        } 
     543         
     544        if(0x0000 != ((*cIt)->uiEntryDesc & ContainerChangeEntry::SubReference)) 
     545        { 
     546#ifndef SILENT_CPTR 
     547            fprintf(stderr, "ChangeList::doApply: SubReference\n"); 
     548#endif 
     549            pDst->subReference(); 
     550        } 
     551         
     552        if((bClear == true) && (pSrc != NULL)) 
     553        { 
     554            pSrc->clearChangeEntry(*cIt); 
     555        } 
     556         
    505557        ++cIt; 
    506558    } 
     
    569621    while(cIt != cEnd) 
    570622    { 
    571         if((*cIt)->uiEntryDesc == ContainerChangeEntry::AddExternalReference || 
    572            (*cIt)->uiEntryDesc == ContainerChangeEntry::SubExternalReference   ) 
     623        if((*cIt)->uiEntryDesc == ContainerChangeEntry::AddReference     || 
     624           (*cIt)->uiEntryDesc == ContainerChangeEntry::SubReference     || 
     625           (*cIt)->uiEntryDesc == ContainerChangeEntry::ResolveCandidate || 
     626           (*cIt)->uiEntryDesc == ContainerChangeEntry::DestroyCandidate   ) 
    573627        { 
    574628            ContainerChangeEntry *pEntry = getNewEntry(); 
     
    612666            this->addCreated(i); 
    613667 
    614             for(UInt32 j = 0; j < pContainer->getExternalRefCount(); ++j) 
    615                 this->addAddExternalRef(i); 
     668            for(UInt32 j = 0; j < pContainer->getRefCount(); ++j) 
     669                this->addAddReference(i); 
    616670             
    617671            ContainerChangeEntry *pEntry = this->getNewEntry();