Changeset 1157

Show
Ignore:
Timestamp:
04/14/08 08:19:31 (1 month ago)
Author:
vossg
Message:

changed: adjusted old fcptr fields to new child linking

  • more of a tmp hack as these will be removed soon
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrChildMField.h

    r1153 r1157  
    417417 
    418418    FieldContainerPtrChildMField(ParentT pParent, 
    419                                  UInt16  usParentFieldPos); 
     419                                 UInt16  usChildFieldId, 
     420                                 UInt16  usParentFieldId); 
    420421 
    421422    /*! \}                                                                 */ 
     
    570571  protected: 
    571572 
     573#if 0 
    572574    struct SingleParentHandler 
    573575    { 
     
    626628        SingleParentHandler, 
    627629        MultiParentHandler>::type ParentHandler; 
     630#endif 
    628631 
    629632    /*---------------------------------------------------------------------*/ 
     
    658661 
    659662    ParentT _pParent; 
    660     UInt16  _usParentFieldPos; 
     663    UInt16  _usChildFieldId; 
     664    UInt16  _usParentFieldId; 
    661665 
    662666    /*! \}                                                                 */ 
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrChildMField.inl

    r1153 r1157  
    7777                             iNamespace    >::FieldContainerPtrChildMField( 
    7878                                 ParentT pParent, 
    79                                  UInt16  usParentFieldPos) : 
    80      Inherited       (                ), 
    81     _pParent         (pParent         ), 
    82     _usParentFieldPos(usParentFieldPos) 
     79                                 UInt16  usChildFieldId, 
     80                                 UInt16  usParentFieldId) : 
     81     Inherited      (               ), 
     82    _pParent        (pParent        ), 
     83    _usChildFieldId (usChildFieldId ), 
     84    _usParentFieldId(usParentFieldId) 
    8385{ 
    8486} 
     
    258260        this); 
    259261 
    260     ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     262//    ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     263 
     264    FieldContainerPtr pTmp = value; 
     265 
     266    if(pTmp != NullFC) 
     267        pTmp->linkParent(_pParent, _usChildFieldId, _usParentFieldId); 
    261268 
    262269    return returnValue; 
     
    275282    while(fieldIt != fieldEnd) 
    276283    { 
     284/* 
    277285        ParentHandler::clearParentLinking(*fieldIt,  
    278286                                          _pParent, 
    279287                                          _usParentFieldPos); 
     288 */ 
     289 
     290        FieldContainerPtr pTmp = *fieldIt; 
     291 
     292        if(pTmp != NullFC) 
     293        { 
     294            pTmp->unlinkParent(_pParent, _usParentFieldId); 
     295        } 
    280296 
    281297        RefCountPolicy::subRef(*fieldIt); 
     
    299315    typename StorageType::iterator tmpIt(pos); 
    300316 
    301     ParentHandler::clearParentLinking(*tmpIt, _pParent, _usParentFieldPos); 
    302      
     317//    ParentHandler::clearParentLinking(*tmpIt, _pParent, _usParentFieldPos); 
     318   
     319    FieldContainerPtr pTmp = *tmpIt; 
     320 
     321    if(pTmp != NullFC) 
     322        pTmp->unlinkParent(_pParent, _usParentFieldId); 
     323   
    303324    RefCountPolicy::subRef(*tmpIt); 
    304325 
     
    324345    for(; first != last; ++first) 
    325346    { 
     347/* 
    326348        ParentHandler::clearParentLinking( first.deref(),  
    327349                                          _pParent,  
    328350                                          _usParentFieldPos); 
     351 */ 
     352         
     353        FieldContainerPtr pTmp = first.deref(); 
     354 
     355        if(pTmp != NullFC) 
     356        { 
     357            pTmp->unlinkParent(_pParent, _usParentFieldId); 
     358        } 
    329359 
    330360        RefCountPolicy::subRef(first.deref()); 
     
    341371         typename RefCountPolicy,  
    342372         Int32    iNamespace    > inline 
     373typename FieldContainerPtrChildMField<ValueT,  
     374                                      RefCountPolicy,  
     375                                      iNamespace    >::iterator  
     376    FieldContainerPtrChildMField<ValueT,  
     377                                  RefCountPolicy,  
     378                                  iNamespace    >::find_nc(ArgumentType value) 
     379{ 
     380    typename StorageType::iterator sIt  =  
     381        (this->template dcast<typename Self::StorageType>()).begin(); 
     382    typename StorageType::iterator sEnd =  
     383        (this->template dcast<typename Self::StorageType>()).end  (); 
     384 
     385    typename StorageType::iterator ptrIt = std::find(sIt, sEnd, value); 
     386 
     387    return iterator(ptrIt, this); 
     388} 
     389 
     390 
     391template<class    ValueT,  
     392         typename RefCountPolicy,  
     393         Int32    iNamespace    > inline 
    343394void FieldContainerPtrChildMField<ValueT,  
    344395                                  RefCountPolicy,  
     
    349400    _values.push_back(value); 
    350401 
    351     ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     402//    ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     403     
     404    if(_values.back() != NullFC) 
     405        _values.back()->linkParent(_pParent, _usChildFieldId, _usParentFieldId); 
    352406} 
    353407 
     
    370424        _values.resize(newsize, t); 
    371425 
    372         ParentHandler::updateParentLinking(t, _pParent, _usParentFieldPos); 
     426        //ParentHandler::updateParentLinking(t, _pParent, _usParentFieldPos); 
     427 
     428        FieldContainerPtr pTmp = t; 
     429 
     430        if(pTmp != NullFC) 
     431            pTmp->linkParent(_pParent, _usChildFieldId, _usParentFieldId); 
    373432 
    374433        typename Inherited::iterator       vI = _values.begin() + oldSize; 
     
    402461    StorageType &oStorage = this->template dcast<typename Self::StorageType>(); 
    403462 
     463/* 
    404464    ParentHandler::clearParentLinking( oStorage[uiIdx],  
    405465                                      _pParent,  
    406466                                      _usParentFieldPos); 
     467 */ 
     468 
     469    if(_values[uiIdx] != NullFC) 
     470    { 
     471        _values[uiIdx]->unlinkParent(_pParent, _usParentFieldId); 
     472    } 
    407473 
    408474    RefCountPolicy::setRefd(oStorage[uiIdx], value); 
    409475 
    410     ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     476//    ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     477 
     478    if(_values[uiIdx] != NullFC) 
     479    { 
     480        _values[uiIdx]->linkParent(_pParent, _usChildFieldId, _usParentFieldId); 
     481    } 
    411482} 
    412483 
     
    421492    typename StorageType::iterator tmpIt(pos); 
    422493 
    423     ParentHandler::clearParentLinking(*tmpIt, _pParent, _usParentFieldPos); 
     494//    ParentHandler::clearParentLinking(*tmpIt, _pParent, _usParentFieldPos); 
     495 
     496    if(*tmpIt != NullFC) 
     497    { 
     498        (*tmpIt)->unlinkParent(_pParent, _usParentFieldId); 
     499    } 
    424500 
    425501    RefCountPolicy::setRefd(*tmpIt, value); 
    426502 
    427     ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     503//    ParentHandler::updateParentLinking(value, _pParent, _usParentFieldPos); 
     504 
     505    if(value != NullFC) 
     506    { 
     507        value->linkParent(_pParent, _usChildFieldId, _usParentFieldId); 
     508    } 
    428509} 
    429510 
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrChildSField.h

    r1150 r1157  
    105105 
    106106    FieldContainerPtrChildSField(ParentT      pParent, 
    107                                  UInt16       usParentFieldPos); 
     107                                 UInt16       usChildFieldId, 
     108                                 UInt16       usParentFieldId); 
    108109 
    109110    FieldContainerPtrChildSField(ArgumentType value, 
    110111                                 ParentT      pParent, 
    111                                  UInt16       usParentFieldPos); 
     112                                 UInt16       usChildFieldId, 
     113                                 UInt16       usParentFieldId); 
    112114 
    113115    /*! \}                                                                 */ 
     
    168170  protected: 
    169171 
     172#if 0 
    170173    struct SingleParentHandler 
    171174    { 
     
    224227        SingleParentHandler, 
    225228        MultiParentHandler>::type ParentHandler; 
     229#endif 
    226230 
    227231    /*---------------------------------------------------------------------*/ 
     
    256260 
    257261    ParentT _pParent; 
    258     UInt16  _usParentFieldPos; 
     262    UInt16  _usChildFieldId; 
     263    UInt16  _usParentFieldId; 
    259264 
    260265    /*! \}                                                                 */ 
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrChildSField.inl

    r1140 r1157  
    7676                             iNamespace    >::FieldContainerPtrChildSField(     
    7777                                 ParentT      pParent, 
    78                                  UInt16       usParentFieldPos) : 
    79      Inherited       (                ), 
    80     _pParent         (pParent         ), 
    81     _usParentFieldPos(usParentFieldPos) 
     78                                 UInt16       usChildFieldId, 
     79                                 UInt16       usParentFieldId) : 
     80     Inherited      (               ), 
     81    _pParent        (pParent        ), 
     82    _usChildFieldId (usChildFieldId ), 
     83    _usParentFieldId(usParentFieldId) 
    8284{ 
    8385} 
     
    9294                                 ArgumentType value, 
    9395                                 ParentT      pParent, 
    94                                  UInt16       usParentFieldPos) : 
    95      Inherited       (                ), 
    96     _pParent         (pParent         ), 
    97     _usParentFieldPos(usParentFieldPos) 
     96                                 UInt16       usChildFieldId, 
     97                                 UInt16       usParentFieldId) : 
     98     Inherited      (               ), 
     99    _pParent        (pParent        ), 
     100    _usChildFieldId (usChildFieldId ), 
     101    _usParentFieldId(usParentFieldId) 
    98102{ 
    99103    RefCountPolicy::setRefd(_fieldValue, value); 
     
    143147    StoredType pVal = this->template dcast<typename Self::StoredType>(); 
    144148 
    145     ParentHandler::clearParentLinking(pVal, _pParent, _usParentFieldPos); 
     149//    ParentHandler::clearParentLinking(pVal, _pParent, _usParentFieldPos); 
     150 
     151    if(_fieldValue != NullFC) 
     152        _fieldValue->unlinkParent(_pParent, _usParentFieldId); 
    146153 
    147154/* 
     
    156163    pVal = this->template dcast<typename Self::StoredType>(); 
    157164 
    158     ParentHandler::updateParentLinking(pVal, _pParent, _usParentFieldPos); 
     165//    ParentHandler::updateParentLinking(pVal, _pParent, _usParentFieldPos); 
     166 
     167    if(_fieldValue != NullFC) 
     168        _fieldValue->linkParent(_pParent, _usChildFieldId, _usParentFieldId); 
     169 
    159170 
    160171/* 
     
    175186    StoredType pVal = this->template dcast<typename Self::StoredType>(); 
    176187 
    177     ParentHandler::clearParentLinking(pVal, _pParent, _usParentFieldPos); 
     188//    ParentHandler::clearParentLinking(pVal, _pParent, _usParentFieldPos); 
     189 
     190    if(pVal != NullFC) 
     191        pVal->unlinkParent(_pParent, _usParentFieldId); 
    178192 
    179193/* 
     
    188202    pVal = this->template dcast<typename Self::StoredType>(); 
    189203 
    190     ParentHandler::updateParentLinking(pVal, _pParent, _usParentFieldPos); 
     204//    ParentHandler::updateParentLinking(pVal, _pParent, _usParentFieldPos); 
     205 
     206    if(pVal != NullFC) 
     207        pVal->linkParent(_pParent, _usChildFieldId, _usParentFieldId); 
    191208 
    192209/* 
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrParentMField.h

    r1153 r1157  
    102102 
    103103    template<class StorageTypeT> 
     104    class const_ptrfield_iterator; 
     105 
     106    template<class StorageTypeT> 
    104107    class ptrfield_iterator : protected StorageTypeT::iterator 
    105108    { 
     
    108111        typedef std::vector<UInt16>           PosStorage; 
    109112        typedef std::vector<UInt16>::iterator PosStorageIt; 
     113 
     114        typedef const_ptrfield_iterator<StorageTypeT> const_it; 
     115 
     116        template<class ST> 
     117        friend class const_ptrfield_iterator; 
    110118 
    111119        PosStorageIt _posIt; 
     
    156164        } 
    157165 
     166        bool operator ==(const const_it &rhs) const 
     167        { 
     168            return *(static_cast<const Inherited *>(this)) == rhs; 
     169        } 
     170 
     171        bool operator !=(const const_it &rhs) const 
     172        { 
     173            return ! (*this == rhs); 
     174        } 
     175 
    158176        ptrfield_iterator &operator ++(void) 
    159177        { 
     
    175193        } 
    176194 
     195        PosStorageIt getPosIt(void) const 
     196        { 
     197            return _posIt; 
     198        } 
     199 
     200        Inherited getBaseIt(void) const 
     201        { 
     202            return *this; 
     203        } 
     204 
    177205      protected: 
    178206    }; 
     
    185213        typedef std::vector<UInt16>                 PosStorage; 
    186214        typedef std::vector<UInt16>::const_iterator PosStorageIt; 
     215 
     216        template<class ST> 
     217        friend class ptrfield_iterator; 
    187218 
    188219        PosStorageIt _posIt; 
     
    321352    void                   erase    (size_type    pos                  ); 
    322353     
     354    iterator               find_nc  (ArgumentType value                ); 
     355 
    323356    iterator               find     (ArgumentType value                ); 
    324357    const_iterator         find     (ArgumentType value                ) const; 
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrParentMField.inl

    r1153 r1157  
    240240 
    241241template<class ValueT, typename RefCountPolicy, Int32 iNamespace> inline 
     242typename FieldContainerPtrParentMField<ValueT,  
     243                                       RefCountPolicy,  
     244                                       iNamespace    >::iterator  
     245    FieldContainerPtrParentMField<ValueT,  
     246                                  RefCountPolicy,  
     247                                  iNamespace    >::erase(iterator pos) 
     248{ 
     249    typename StorageType::iterator tmpIt(pos.getBaseIt()); 
     250     
     251    RefCountPolicy::subRef(*tmpIt); 
     252 
     253    std::vector<UInt16> ::iterator posIt = _vParentPos.erase(pos.getPosIt()); 
     254 
     255    return iterator( 
     256        (this->template dcast<typename Self::StorageType>()).erase(tmpIt), 
     257        posIt); 
     258 
     259} 
     260 
     261template<class ValueT, typename RefCountPolicy, Int32 iNamespace> inline 
    242262void FieldContainerPtrParentMField<ValueT,  
    243263                                   RefCountPolicy,  
     
    255275 
    256276    _vParentPos.erase(pIt); 
     277} 
     278 
     279template<class ValueT, typename RefCountPolicy, Int32 iNamespace> inline 
     280typename FieldContainerPtrParentMField<ValueT,  
     281                                       RefCountPolicy,  
     282                                       iNamespace    >::iterator   
     283    FieldContainerPtrParentMField<ValueT,  
     284                                  RefCountPolicy,  
     285                                  iNamespace    >::find_nc(ArgumentType value) 
     286{ 
     287    typename StorageType::iterator sIt  =  
     288        (this->template dcast<typename Self::StorageType>()).begin(); 
     289    typename StorageType::iterator sEnd =  
     290        (this->template dcast<typename Self::StorageType>()).end  (); 
     291 
     292    typename StorageType::iterator ptrIt = std::find(sIt, sEnd, value); 
     293 
     294    std::vector<UInt16>::iterator posIt = _vParentPos.begin(); 
     295 
     296    posIt += (ptrIt -  
     297              (this->template dcast<typename Self::StorageType>()).begin()); 
     298 
     299    return iterator(ptrIt, posIt); 
    257300} 
    258301 
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrParentSField.h

    r1150 r1157  
    120120    /*! \{                                                                 */ 
    121121 
    122     const_reference getValue(void) const; 
     122    const_reference getValue         (void) const; 
     123    UInt16          getParentFieldPos(void) const; 
    123124 
    124125    /*! \}                                                                 */ 
  • trunk/Source/System/FieldContainer/Fields/Base/OSGFieldContainerPtrParentSField.inl

    r1120 r1157  
    123123 
    124124template<class ValueT, typename RefCountPolicy, Int32 iNamespace> inline 
     125UInt16 FieldContainerPtrParentSField<ValueT,  
     126                                     RefCountPolicy,  
     127                                     iNamespace    >::getParentFieldPos( 
     128                                         void) const 
     129{ 
     130    return _uiParentFieldPos; 
     131} 
     132 
     133template<class ValueT, typename RefCountPolicy, Int32 iNamespace> inline 
    125134void FieldContainerPtrParentSField<ValueT,  
    126135                                   RefCountPolicy,