Changeset 1284

Show
Ignore:
Timestamp:
06/06/08 02:56:55 (6 months ago)
Author:
vossg
Message:

added: sanity check to generic pushToChunks

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.cpp

    r1198 r1284  
    177177        UInt32 newsize = cindex + 1; 
    178178 
    179         _mfChunks.resize(newsize); 
    180  
     179        _mfChunks.resize(newsize, NULL); 
     180 
     181#if 0 
    181182        for(UInt32 i = oldsize; i < newsize; i++) 
    182183        { 
    183184            _mfChunks.replace(i, NULL); 
    184185        } 
     186#endif 
    185187    } 
    186188 
     
    371373} 
    372374 
     375 
     376void ChunkOverrideGroup::pushToChunks(StateChunk * const value) 
     377{ 
     378    if(value != NULL) 
     379    { 
     380        // addChunk(value) does not work as expected 
     381        // 
     382        // Do at least a sanity check if the slot matches 
     383        // the chunk 
     384 
     385        if(_mfChunks.size() < value->getClassId() || 
     386           _mfChunks.size() >= (value->getClassId() +  
     387                                value->getClass()->getNumSlots())) 
     388        { 
     389            SWARNING << "pushToChunk: chunk ( "  
     390                     << value->getClassId() 
     391                     << " | " 
     392                     << value->getClass()->getNumSlots() 
     393                     << "does not match available slot " 
     394                     << _mfChunks.size() 
     395                     << ",  ignored!"  
     396                     << std::endl; 
     397             
     398             
     399            return; 
     400        } 
     401    } 
     402 
     403    editMField(ChunksFieldMask, _mfChunks); 
     404 
     405    _mfChunks.push_back(value); 
     406} 
     407 
     408#if 0 
     409void ChunkOverrideGroup::assignChunks   (const MFUnrecStateChunkPtr &value) 
     410{ 
     411    MFUnrecStateChunkPtr::const_iterator elemIt  = 
     412        value.begin(); 
     413    MFUnrecStateChunkPtr::const_iterator elemEnd = 
     414        value.end  (); 
     415 
     416    static_cast<ChunkOverrideGroup *>(this)->clearChunks(); 
     417 
     418    while(elemIt != elemEnd) 
     419    { 
     420        this->pushToChunks(*elemIt); 
     421 
     422        ++elemIt; 
     423    } 
     424} 
     425#endif 
     426 
     427void ChunkOverrideGroup::removeFromChunks(UInt32 uiIndex) 
     428{ 
     429    if(uiIndex < _mfChunks.size()) 
     430    { 
     431        editMField(ChunksFieldMask, _mfChunks); 
     432 
     433        _mfChunks.replace(uiIndex, NULL); 
     434 
     435#if 0 
     436        MFUnrecStateChunkPtr::iterator fieldIt = _mfChunks.begin_nc(); 
     437 
     438        fieldIt += uiIndex; 
     439 
     440        _mfChunks.erase(fieldIt); 
     441#endif 
     442    } 
     443} 
     444 
     445void ChunkOverrideGroup::removeFromChunks(StateChunk * const value) 
     446{ 
     447    Int32 iElemIdx = _mfChunks.findIndex(value); 
     448 
     449    if(iElemIdx != -1) 
     450    { 
     451        editMField(ChunksFieldMask, _mfChunks); 
     452 
     453        _mfChunks.replace(iElemIdx, NULL); 
     454 
     455#if 0 
     456        MFUnrecStateChunkPtr::iterator fieldIt = _mfChunks.begin_nc(); 
     457 
     458        fieldIt += iElemIdx; 
     459 
     460        _mfChunks.erase(fieldIt); 
     461#endif 
     462    } 
     463} 
     464void ChunkOverrideGroup::clearChunks(void) 
     465{ 
     466    editMField(ChunksFieldMask, _mfChunks); 
     467 
     468 
     469    _mfChunks.clear(); 
     470} 
     471 
    373472OSG_END_NAMESPACE 
  • trunk/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.fcd

    r894 r1284  
    2121                visibility="external" 
    2222        access="protected" 
     23        ptrFieldAccess = "custom" 
    2324    > 
    2425        </Field> 
  • trunk/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.h

    r1198 r1284  
    138138    /*! \}                                                                 */ 
    139139    /*---------------------------------------------------------------------*/ 
     140    /*! \name                Ptr MField Set                                */ 
     141    /*! \{                                                                 */ 
     142 
     143    void pushToChunks              (StateChunk * const value   ); 
     144#if 0 
     145    void assignChunks              (const MFUnrecStateChunkPtr &value); 
     146#endif 
     147    void removeFromChunks (UInt32                uiIndex ); 
     148    void removeFromChunks(StateChunk * const value   ); 
     149    void clearChunks                (void                          ); 
     150 
     151    /*! \}                                                                 */ 
     152    /*---------------------------------------------------------------------*/ 
    140153    /*! \name                      Init                                    */ 
    141154    /*! \{                                                                 */ 
  • trunk/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.cpp

    r1260 r1284  
    143143    "\t\tvisibility=\"external\"\n" 
    144144    "        access=\"protected\"\n" 
     145    "        ptrFieldAccess = \"custom\"\n" 
    145146    "    >\n" 
    146147    "\t</Field>\n" 
     
    178179} 
    179180 
    180 MFUnrecStateChunkPtr *ChunkOverrideGroupBase::editMFChunks         (void) 
    181 
    182     editMField(ChunksFieldMask, _mfChunks); 
    183  
    184     return &_mfChunks; 
    185 
    186  
    187  
    188  
    189 void ChunkOverrideGroupBase::pushToChunks(StateChunk * const value) 
    190 
    191     editMField(ChunksFieldMask, _mfChunks); 
    192  
    193     _mfChunks.push_back(value); 
    194 
    195  
    196 void ChunkOverrideGroupBase::assignChunks   (const MFUnrecStateChunkPtr &value) 
    197 
    198     MFUnrecStateChunkPtr::const_iterator elemIt  = 
    199         value.begin(); 
    200     MFUnrecStateChunkPtr::const_iterator elemEnd = 
    201         value.end  (); 
    202  
    203     static_cast<ChunkOverrideGroup *>(this)->clearChunks(); 
    204  
    205     while(elemIt != elemEnd) 
    206     { 
    207         this->pushToChunks(*elemIt); 
    208  
    209         ++elemIt; 
    210     } 
    211 
    212  
    213 void ChunkOverrideGroupBase::removeFromChunks(UInt32 uiIndex) 
    214 
    215     if(uiIndex < _mfChunks.size()) 
    216     { 
    217         editMField(ChunksFieldMask, _mfChunks); 
    218  
    219         MFUnrecStateChunkPtr::iterator fieldIt = _mfChunks.begin_nc(); 
    220  
    221         fieldIt += uiIndex; 
    222  
    223         _mfChunks.erase(fieldIt); 
    224     } 
    225 
    226  
    227 void ChunkOverrideGroupBase::removeFromChunks(StateChunk * const value) 
    228 
    229     Int32 iElemIdx = _mfChunks.findIndex(value); 
    230  
    231     if(iElemIdx != -1) 
    232     { 
    233         editMField(ChunksFieldMask, _mfChunks); 
    234  
    235         MFUnrecStateChunkPtr::iterator fieldIt = _mfChunks.begin_nc(); 
    236  
    237         fieldIt += iElemIdx; 
    238  
    239         _mfChunks.erase(fieldIt); 
    240     } 
    241 
    242 void ChunkOverrideGroupBase::clearChunks(void) 
    243 
    244     editMField(ChunksFieldMask, _mfChunks); 
    245  
    246  
    247     _mfChunks.clear(); 
    248 
     181 
     182 
    249183 
    250184 
  • trunk/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.h

    r1197 r1284  
    208208 
    209209            const MFUnrecStateChunkPtr *getMFChunks          (void) const; 
    210                   MFUnrecStateChunkPtr *editMFChunks         (void); 
    211210 
    212211 
     
    223222    /*! \name                Ptr MField Set                                */ 
    224223    /*! \{                                                                 */ 
    225  
    226     void pushToChunks              (StateChunk * const value   ); 
    227     void assignChunks              (const MFUnrecStateChunkPtr &value); 
    228     void removeFromChunks (UInt32                uiIndex ); 
    229     void removeFromChunks(StateChunk * const value   ); 
    230     void clearChunks                (void                          ); 
    231  
    232224 
    233225    /*! \}                                                                 */