Ignore:
Timestamp:
10/16/12 13:04:44 (12 years ago)
Author:
ymipsl
Message:

Major Update

  • redesign Type and attribute manipulation
  • add enumerate type and attribute
  • use blitz class array instead of boost class array

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/type/type.hpp

    r352 r369  
    1212{ 
    1313 
     14  template <typename T> class CType_ref ; 
     15     
    1416  template <typename T>  
    15   class CType : public CBaseType 
     17  class CType : public  virtual CBaseType 
    1618  { 
    1719    public: 
     
    1921    CType(void) ; 
    2022    CType(const T& val) ; 
    21     CType(T& val) ; 
    2223    CType(const CType& type) ; 
     24    CType(const CType_ref<T>& type) ; 
     25    virtual ~CType() { _reset() ; } 
    2326 
    24     ~CType() {} ; 
     27    T& get(void) ; 
     28    const T& get(void) const; 
    2529 
    26     void fromString(const string& str) ; 
    27     string toString(void) const; 
     30    void set(const T& val) ; 
     31    void set(const CType& val) ; 
     32    void set(const CType_ref<T>& val) ; 
     33    CType& operator = (const T& val) ; 
     34    CType& operator = (const CType& val) ; 
     35    CType& operator = (const CType_ref<T>& val) ; 
     36    operator T&() ; 
    2837     
    29     bool fromBuffer(CBufferIn& buffer) ; 
    30     bool toBuffer(CBufferOut& buffer) const; 
    31     void destroy(void) ; 
     38    virtual CType* clone(void) const   { return _clone(); } 
     39    virtual void fromString(const string& str)   { _fromString(str); } 
     40    virtual string toString(void) const { return _toString(); } 
     41    virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer) ; } 
     42    virtual bool toBuffer(CBufferOut& buffer) const { return _toBuffer(buffer); } 
     43    virtual void reset(void) { _reset(); } 
     44    virtual bool isEmpty() const { return _isEmpty(); }  
     45    virtual size_t size(void) const { return _size(); } 
    3246     
    33     size_t size(void) const; 
    34     CBaseType* duplicate(void) const;   
    35  
    36     void checkAccess(void) const; 
     47    void allocate(void) ; 
     48    void checkEmpty(void) const; 
     49        
    3750    T* ptrValue ; 
    38      
    39     bool clone ; 
    40     T value ;  
     51    bool empty ; 
     52       
     53    friend class CType_ref<T> ;  
     54  
     55    private : 
     56  
     57    CType* _clone(void) const; 
     58    void _fromString(const string& str) ; 
     59    string _toString(void) const; 
     60    bool _fromBuffer(CBufferIn& buffer) ; 
     61    bool _toBuffer(CBufferOut& buffer) const; 
     62    void _reset(void) ; 
     63    bool _isEmpty() const ;   
     64    size_t _size(void) const ; 
     65  
    4166  } ; 
    4267 
     68 
     69  template<typename T> class CType ; 
     70     
     71  template <typename T>  
     72  class CType_ref : public virtual CBaseType 
     73  { 
     74    public: 
     75   
     76    CType_ref(void) ; 
     77    CType_ref(T& val) ; 
     78    CType_ref(CType<T>& type) ; 
     79    CType_ref(const CType_ref& type) ; 
     80    virtual ~CType_ref() {}; 
     81 
     82    T& get(void) const; 
     83 
     84    void set(const T& val) const ; 
     85    void set(const CType<T>& val) const ; 
     86    void set(const CType_ref& val) const ; 
     87 
     88    void set_ref(T& val) ; 
     89    void set_ref(CType<T>& val) ; 
     90    void set_ref(const CType_ref& val) ; 
     91     
     92    const CType_ref& operator = (T& val) const ; 
     93    const CType_ref& operator = (CType<T>& val) const ; 
     94    const CType_ref& operator = (const CType_ref& val) const; 
     95    operator T&() const; 
     96 
     97    virtual CType_ref* clone(void) const   { return _clone(); } 
     98    virtual void fromString(const string& str)   { _fromString(str); } 
     99    virtual void fromString(const string& str) const  { _fromString(str); } 
     100    virtual string toString(void) const { return _toString(); } 
     101    virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer) ; } 
     102    virtual bool fromBuffer(CBufferIn& buffer) const { return _fromBuffer(buffer); } 
     103    virtual bool toBuffer(CBufferOut& buffer) const { return _toBuffer(buffer); } 
     104    virtual void reset(void) { _reset(); } 
     105    virtual bool isEmpty() const { return _isEmpty(); }  
     106    virtual size_t size(void) const { return _size(); } 
     107 
     108    void checkEmpty(void) const; 
     109     
     110 
     111    T mutable * ptrValue ; 
     112    bool empty ; 
     113    friend class CType<T> ; 
     114     
     115    private : 
     116     
     117    CType_ref* _clone(void) const; 
     118    void _fromString(const string& str) ; 
     119    void _fromString(const string& str) const; 
     120    string _toString(void) const; 
     121    bool _fromBuffer(CBufferIn& buffer) ; 
     122    bool _fromBuffer(CBufferIn& buffer) const ; 
     123    bool _toBuffer(CBufferOut& buffer) const; 
     124    void _reset(void) ; 
     125    bool _isEmpty() const ;   
     126    size_t _size(void) const ; 
     127  } ; 
     128   
     129   
    43130  class CMessage ; 
    44131   
    45132  template <typename T> 
    46133  CBufferOut& operator<<(CBufferOut& buffer, const CType<T>& type) ; 
    47    
    48134 
    49135  template <typename T> 
    50   CBufferOut& operator<<(CBufferOut& buffer, T& type) ; 
     136  CBufferOut& operator<<(CBufferOut& buffer, const CType_ref<T>& type) ; 
    51137   
    52138  template <typename T> 
     
    54140   
    55141  template <typename T> 
    56   CBufferIn& operator>>(CBufferIn& buffer, const CType<T>& type) ; 
    57    
    58   template <typename T> 
    59   CBufferIn& operator>>(CBufferIn& buffer, T& type) ; 
    60    
     142  CBufferOut& operator<<(CBufferOut& buffer, T& type) ; 
    61143 
    62144 
    63145  template <typename T> 
     146  CBufferIn& operator>>(CBufferIn& buffer, CType<T>& type) ; 
     147 
     148  template <typename T> 
     149  CBufferIn& operator>>(CBufferIn& buffer, const CType_ref<T>& type) ; 
     150 
     151  template <typename T> 
     152  CBufferIn& operator>>(CBufferIn& buffer, T& type) ; 
     153 
     154  template <typename T> 
    64155  CMessage& operator<<(CMessage& msg, const CType<T>& type) ; 
     156 
     157  template <typename T> 
     158  CMessage& operator<<(CMessage& msg, const CType_ref<T>& type) ; 
    65159   
    66   template <typename T> 
    67   CMessage& operator<<(CMessage& msg,CType<T>& type) ; 
    68160   
    69161  template <typename T> 
    70162  CMessage& operator<<(CMessage& msg, const T& type) ; 
    71    
     163 
    72164  template <typename T> 
    73165  CMessage& operator<<(CMessage& msg, T& type) ; 
    74    
     166 
    75167} 
    76168 
    77169 
    78 //#include "type_impl.hpp" 
    79 //#include "type_specialisation.hpp" 
     170//#include "test_type_impl.hpp" 
     171//#include "test_type_specialisation.hpp" 
    80172 
    81173#endif 
     174 
Note: See TracChangeset for help on using the changeset viewer.