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/Base/Field/OSGFieldTraits.h

    r1033 r1072  
    5252 
    5353#include <boost/mpl/if.hpp> 
     54#include <boost/mpl/eval_if.hpp> 
    5455#include <boost/mpl/identity.hpp> 
    5556 
     
    130131 
    131132    typedef      OSG_STL_DEFAULT_ALLOCATOR(ValueT) MFAlloc; 
    132  
    133  
     133         
    134134    static const Int32                 iNamespace      = NamespaceI; 
    135135    static const bool                  bIsPointerField = false; 
     
    471471}; 
    472472 
    473 template<class DescT,  
    474          enum  FieldType::Cardinality FieldCardE> 
    475 class FieldDescription : public DescT::FieldDescParent 
    476 
     473template <class DescTypeT, 
     474          enum  FieldType::Cardinality FieldCardE, 
     475          enum  FieldType::Class       FieldClassE = FieldType::DATA_FIELD> 
     476class FieldDescription : public DescTypeT::FieldDescParent 
     477
     478    /*==========================  PUBLIC  =================================*/ 
     479  public: 
     480    typedef          DescTypeT                      DescType; 
     481   
     482    typedef          FieldDescription<DescTypeT, 
     483                                      FieldCardE, 
     484                                      FieldClassE>  Self; 
     485    typedef typename DescTypeT::FieldDescParent     Inherited; 
     486 
     487    /*=========================  PROTECTED  ===============================*/ 
    477488  protected: 
    478  
    479     typedef          FieldDescription<DescT, 
    480                                       FieldCardE>       Self; 
    481     typedef typename DescT::FieldDescParent             Inherited; 
    482  
    483     typedef typename boost::mpl::if_c< 
    484         FieldCardE == FieldType::SINGLE_FIELD, 
    485         SField<typename DescT::ValueType, 
    486                         DescT::iNamespace>, 
    487         MField<typename DescT::ValueType, 
    488                         DescT::iNamespace, 
    489                typename DescT::MFAlloc    >   >::type   HandledField; 
    490  
    491     typedef typename HandledField::GetHandle            GetHandle; 
    492     typedef typename HandledField::GetHandlePtr         GetHandlePtr; 
    493     typedef typename HandledField::EditHandle           EditHandle; 
    494     typedef typename HandledField::EditHandlePtr        EditHandlePtr; 
    495  
    496     typedef typename HandledField::DynamicGetHandle     DynamicGetHandle; 
    497     typedef typename HandledField::DynamicGetHandlePtr  DynamicGetHandlePtr; 
    498     typedef typename HandledField::DynamicEditHandle    DynamicEditHandle; 
    499     typedef typename HandledField::DynamicEditHandlePtr DynamicEditHandlePtr; 
     489    template <class DescT> 
     490    struct DataSFieldSelector 
     491    { 
     492        typedef typename DescT::DataSField type; 
     493    }; 
     494   
     495    template <class DescT> 
     496    struct DataMFieldSelector 
     497    { 
     498        typedef typename DescT::DataMField type; 
     499    }; 
     500     
     501    template <class DescT> 
     502    struct ChildSFieldSelector 
     503    { 
     504        typedef typename DescT::ChildSField type; 
     505    }; 
     506     
     507    template <class DescT> 
     508    struct ChildMFieldSelector 
     509    { 
     510        typedef typename DescT::ChildMField type; 
     511    }; 
     512     
     513    template <class DescT> 
     514    struct ParentSFieldSelector 
     515    { 
     516        typedef typename DescT::ParentSField type; 
     517    }; 
     518     
     519    template <class DescT> 
     520    struct ParentMFieldSelector 
     521    { 
     522        typedef typename DescT::ParentMField type; 
     523    }; 
     524     
     525    template <class DescT> 
     526    struct UnrecordedSFieldSelector 
     527    { 
     528        typedef typename DescT::UnrecordedSField type; 
     529    }; 
     530     
     531    template <class DescT> 
     532    struct UnrecordedMFieldSelector 
     533    { 
     534        typedef typename DescT::UnrecordedMField type; 
     535    }; 
     536     
     537    template <class DescT> 
     538    struct WeakSFieldSelector 
     539    { 
     540        typedef typename DescT::WeakSField type; 
     541    }; 
     542     
     543    template <class DescT> 
     544    struct WeakMFieldSelector 
     545    { 
     546        typedef typename DescT::WeakMField type; 
     547    }; 
     548         
     549    /*==========================  PUBLIC  =================================*/ 
     550  public: 
     551    /*---------------------------------------------------------------------*/ 
     552    /*! \name Public Types                                                 */ 
     553    /*! \{                                                                 */ 
     554     
     555    typedef typename boost::mpl::eval_if_c< 
     556        FieldClassE == FieldType::DATA_FIELD, 
     557        boost::mpl::eval_if_c< 
     558            FieldCardE == FieldType::SINGLE_FIELD, 
     559            DataSFieldSelector<DescType>, 
     560            DataMFieldSelector<DescType> >, 
     561        boost::mpl::eval_if_c< 
     562            FieldClassE == FieldType::CHILD_POINTER_FIELD, 
     563            boost::mpl::eval_if_c< 
     564                FieldCardE == FieldType::SINGLE_FIELD, 
     565                ChildSFieldSelector<DescType>, 
     566                ChildMFieldSelector<DescType> >, 
     567            boost::mpl::eval_if_c< 
     568                FieldClassE == FieldType::PARENT_POINTER_FIELD, 
     569                boost::mpl::eval_if_c< 
     570                    FieldCardE == FieldType::SINGLE_FIELD, 
     571                    ParentSFieldSelector<DescType>, 
     572                    ParentMFieldSelector<DescType> >, 
     573                boost::mpl::eval_if_c< 
     574                    FieldClassE == FieldType::UNRECORDED_POINTER_FIELD, 
     575                    boost::mpl::eval_if_c< 
     576                        FieldCardE == FieldType::SINGLE_FIELD, 
     577                        UnrecordedSFieldSelector<DescType>, 
     578                        UnrecordedMFieldSelector<DescType> >, 
     579                    boost::mpl::eval_if_c< 
     580                        FieldClassE == FieldType::WEAK_POINTER_FIELD, 
     581                        boost::mpl::eval_if_c< 
     582                            FieldCardE == FieldType::SINGLE_FIELD, 
     583                            WeakSFieldSelector<DescType>, 
     584                            WeakMFieldSelector<DescType> >, 
     585                        boost::mpl::identity<void> 
     586                        > 
     587                    > 
     588                > 
     589            > 
     590        >::type                                              HandledFieldType; 
     591     
     592    typedef typename HandledFieldType::GetHandle             GetHandle; 
     593    typedef typename HandledFieldType::GetHandlePtr          GetHandlePtr; 
     594    typedef typename HandledFieldType::EditHandle            EditHandle; 
     595    typedef typename HandledFieldType::EditHandlePtr         EditHandlePtr; 
     596     
     597    typedef typename HandledFieldType::DynamicGetHandle      DynamicGetHandle; 
     598    typedef typename HandledFieldType::DynamicGetHandlePtr   DynamicGetHandlePtr; 
     599    typedef typename HandledFieldType::DynamicEditHandle     DynamicEditHandle; 
     600    typedef typename HandledFieldType::DynamicEditHandlePtr  DynamicEditHandlePtr; 
    500601     
    501602    typedef typename 
    502603        boost::mpl::if_c< 
    503604            FieldCardE == FieldType::SINGLE_FIELD, 
    504             typename Inherited::template SFieldFunctions<HandledField>, 
    505             typename Inherited::template MFieldFunctions<HandledField> >::type 
    506                                                       FieldFunctions; 
    507  
    508     virtual void beginEdit(Field              *pField, 
    509                            UInt32              uiAspect, 
    510                            AspectOffsetStore  &oOffsets); 
    511  
    512     virtual bool isShared (Field              *pField  ); 
    513  
    514   public: 
     605            typename Inherited::template SFieldFunctions<HandledFieldType>, 
     606            typename Inherited::template MFieldFunctions<HandledFieldType> 
     607            >::type                                   FieldFunctions; 
     608                                                       
     609    /*! \}                                                                 */ 
     610    /*---------------------------------------------------------------------*/ 
     611    /*! \name Constructors                                                 */ 
     612    /*! \{                                                                 */ 
    515613 
    516614    FieldDescription(const FieldType        &elementType, 
     
    536634    FieldDescription(const FieldDescription &source); 
    537635 
     636    /*! \}                                                                 */ 
     637    /*---------------------------------------------------------------------*/ 
     638    /*! \name Destructor                                                   */ 
     639    /*! \{                                                                 */ 
     640     
    538641    virtual ~FieldDescription(void); 
    539642 
    540     const   HandledField *dcast_const (const Field *pField) const; 
    541             HandledField *dcast       (      Field *pField) const; 
    542  
    543     virtual Field        *createField (FieldContainer *pEnclosingFC) const; 
    544     virtual void          destroyField(Field          *pField      ) const; 
     643    /*! \}                                                                 */ 
     644    /*---------------------------------------------------------------------*/ 
     645    /*! \name Class specific                                               */ 
     646    /*! \{                                                                 */ 
     647     
     648    const   HandledFieldType *dcast_const (const Field *pField) const; 
     649            HandledFieldType *dcast       (      Field *pField) const; 
     650 
     651    virtual Field *createField (FieldContainerPtr  pEnclosingFC) const; 
     652    virtual void   destroyField(Field             *pField      ) const; 
    545653 
    546654    virtual FieldDescriptionBase *clone(void) const; 
     
    553661    virtual EditFieldHandlePtr 
    554662        createDynamicEditHandler(Field       *pField) const; 
     663     
     664    /*! \}                                                                 */ 
     665    /*=========================  PROTECTED  ===============================*/ 
     666  protected: 
     667    virtual void beginEdit(Field              *pField, 
     668                           UInt32              uiAspect, 
     669                           AspectOffsetStore  &oOffsets); 
     670 
     671    virtual bool isShared (Field              *pField  ); 
    555672}; 
    556673