Changeset 677 for XIOS/branchs


Ignore:
Timestamp:
08/31/15 16:19:19 (9 years ago)
Author:
rlacroix
Message:

Fix array attributes to be able to distinguish between empty arrays and uninitialized attributes.

The sementic of "isEmpty()" was different for array attributes which was confusing and caused some issues for corner cases.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/branchs/xios-1.0/src/array_new.hpp

    r501 r677  
    99#include <cmath> 
    1010 
    11 using namespace blitz ; 
     11using namespace blitz; 
    1212BZ_DECLARE_FUNCTION(round) 
     13 
    1314namespace xios 
    1415{ 
    15      
    16 template <typename T_numtype,int N_rank> 
    17 class CArray : public Array<T_numtype,N_rank>, public virtual CBaseType 
    18 { 
    19   public : 
    20   using Array<T_numtype,N_rank>::operator = ; 
    21   typedef typename Array<T_numtype,N_rank>::T_default_storage T_default_storage; 
    22    
    23     template<typename T_expr> explicit CArray(_bz_ArrayExpr<T_expr> expr) : Array<T_numtype,N_rank>(expr) {}  
    24  
    25     CArray(GeneralArrayStorage<N_rank> storage=T_default_storage()) : Array<T_numtype,N_rank>(storage) {} 
    26  
    27     explicit CArray(int length0,GeneralArrayStorage<N_rank> storage=T_default_storage() ) : Array<T_numtype,N_rank>(length0,storage ) {} 
    28  
    29     CArray(int length0, int length1, GeneralArrayStorage<N_rank> storage=T_default_storage() ) : Array<T_numtype,N_rank>(length0, length1, storage ) {} 
    30  
    31     CArray(int length0, int length1, int length2, GeneralArrayStorage<N_rank> storage=T_default_storage() ) : Array<T_numtype,N_rank>(length0, length1, length2, storage ) {} 
    32  
    33     CArray(int length0, int length1, int length2, int length3, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    34            : Array<T_numtype,N_rank>(length0, length1, length2, length3, storage ) {} 
    35      
    36     CArray(int length0, int length1, int length2, int length3, int length4, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    37            : Array<T_numtype,N_rank>(length0,length1, length2, length3, length4, storage ) {} 
    38  
    39     CArray(int length0, int length1, int length2, int length3, int length4, int length5, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    40            : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, storage ) {} 
    41          
    42     CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    43            : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, storage ) {} 
    44  
    45     CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7, 
    46            GeneralArrayStorage<N_rank> storage=T_default_storage() ) : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, storage ) {} 
    47  
    48     CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, 
    49            int length7, int length8, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    50            : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, storage ) {} 
    51  
    52     CArray(int length0, int length1, int length2, int length3, int length4, 
    53            int length5, int length6, int length7, int length8, int length9, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    54           : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, storage ) {} 
    55            
    56     CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, 
    57            int length7, int length8, int length9, int length10, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    58            : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, 
    59                    length9, length10, storage ) {} 
    60             
    61  
    62     CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    63           : Array<T_numtype,N_rank>(dataFirst, shape, storage ) {} 
    64  
    65     CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride,  
    66            GeneralArrayStorage<N_rank> storage=T_default_storage()) : Array<T_numtype,N_rank>(dataFirst, shape, stride, storage ) {} 
    67  
    68     CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, preexistingMemoryPolicy deletionPolicy, 
    69           GeneralArrayStorage<N_rank> storage=T_default_storage()) : Array<T_numtype,N_rank>(dataFirst, shape, deletionPolicy, storage) {} 
    70  
    71     CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride, 
    72            preexistingMemoryPolicy deletionPolicy, GeneralArrayStorage<N_rank> storage=T_default_storage()) 
    73           : Array<T_numtype,N_rank>(dataFirst, shape, stride, deletionPolicy, storage) {} 
    74  
    75     CArray(const TinyVector<int, N_rank>& extent, GeneralArrayStorage<N_rank> storage=T_default_storage()) 
    76           : Array<T_numtype,N_rank>(extent, storage) {} 
    77  
    78     CArray(const TinyVector<int, N_rank>& lbounds, const TinyVector<int, N_rank>& extent, 
    79            const GeneralArrayStorage<N_rank>& storage ) : Array<T_numtype,N_rank>(lbounds, extent, storage ) {}  
    80  
    81     CArray(Range r0, GeneralArrayStorage<N_rank> storage=T_default_storage() ) : CArray(r0, storage ) {} 
    82  
    83     CArray(Range r0, Range r1, GeneralArrayStorage<N_rank> storage=T_default_storage() ) : Array<T_numtype,N_rank>(r0, r1, storage ) {} 
    84  
    85     CArray(Range r0, Range r1, Range r2, GeneralArrayStorage<N_rank> storage=T_default_storage() )  
    86            : Array<T_numtype,N_rank>(r0, r1, r2, storage ) {} 
    87  
    88     CArray(Range r0, Range r1, Range r2, Range r3, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    89           : Array<T_numtype,N_rank>(r0, r1, r2, r3, storage ) {} 
    90  
    91     CArray(Range r0, Range r1, Range r2, Range r3, Range r4, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    92           : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, storage ) {} 
    93  
    94     CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    95           : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, storage ) {} 
    96  
    97     CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, 
    98            GeneralArrayStorage<N_rank> storage=T_default_storage() ) : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, storage ) {} 
    99  
    100     CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, 
    101            GeneralArrayStorage<N_rank> storage=T_default_storage() ) : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, storage ) {} 
    102  
    103     CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
    104            Range r6, Range r7, Range r8, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    105           : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, storage ) {} 
    106  
    107     CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
    108            Range r6, Range r7, Range r8, Range r9, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    109           : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, storage ) {} 
    110  
    111     CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, 
    112            Range r8, Range r9, Range r10, GeneralArrayStorage<N_rank> storage=T_default_storage() ) 
    113           : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, storage ) {}  
    114  
    115     CArray(const Array<T_numtype, N_rank>& array) : Array<T_numtype,N_rank>(array) {} 
    116  
    117     CArray(const TinyVector<int,N_rank-1>& shape, int lastExtent, const GeneralArrayStorage<N_rank>& storage) 
    118           : Array<T_numtype,N_rank>(shape, lastExtent, storage) {} 
    119  
    120     CArray(Array<T_numtype, N_rank>& array, Range r0) : Array<T_numtype,N_rank>(array, r0) {} 
    121  
    122     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1) : Array<T_numtype,N_rank>(array, r0, r1) {} 
    123  
    124     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2) : Array<T_numtype,N_rank>( array, r0, r1, r2) {} 
    125  
    126     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3) : Array<T_numtype,N_rank>(array, r0, r1, r2, r3) {} 
    127  
    128     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, 
    129            Range r3, Range r4) : Array<T_numtype,N_rank>(array, r0, r1, r2, r3,  r4) {} 
    130  
    131     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, 
    132            Range r3, Range r4, Range r5) : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5) {} 
    133  
    134     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3,  
    135            Range r4, Range r5, Range r6) : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5, r6) {} 
    136  
    137     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, 
    138            Range r5, Range r6, Range r7) : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7) {} 
    139  
    140     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
    141            Range r6, Range r7, Range r8) : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8) {} 
    142  
    143     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
    144            Range r6, Range r7, Range r8, Range r9) : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9) {} 
    145  
    146     CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, 
    147            Range r7, Range r8, Range r9, Range r10) : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) {} 
    148  
    149     CArray(Array<T_numtype, N_rank>& array, const RectDomain<N_rank>& subdomain) : Array<T_numtype,N_rank>(array, subdomain) {} 
    150  
    151     CArray(Array<T_numtype, N_rank>& array, const StridedDomain<N_rank>& subdomain) : Array<T_numtype,N_rank>(array, subdomain) {}  
    152  
    153     template<int N_rank2, typename R0, typename R1, typename R2, typename R3, typename R4, typename R5, 
    154                           typename R6, typename R7, typename R8, typename R9, typename R10> 
    155     CArray(Array<T_numtype,N_rank2>& array, R0 r0, R1 r1, R2 r2, R3 r3, R4 r4, R5 r5, R6 r6, R7 r7, R8 r8, R9 r9, R10 r10) 
    156           : Array<T_numtype,N_rank>(array, r0,r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) {} 
    157  
    158     virtual ~CArray() {} 
    159     virtual void fromString(const string& str) { istringstream iss(str) ;  iss>>*this ; } 
    160     virtual string toString(void) const { ostringstream oss ; oss<<*this ; return oss.str() ; } 
    161     virtual void reset(void) { this->free(); } 
    162     virtual bool isEmpty(void) const { if (this->numElements()==0) return true; else return false; } 
    163     virtual size_t size(void) const { return (this->dimensions()+1)*sizeof(int)+sizeof(size_t) + this->numElements()*sizeof(T_numtype) ;} 
    164   
    165     virtual CBaseType* clone(void) const { return new CArray(*this); } 
    166         
    167     virtual bool toBuffer(CBufferOut& buffer) const 
    168     { 
    169       bool ret ; 
    170       ret=buffer.put(this->dimensions()) ; 
    171       ret&=buffer.put(this->shape().data(),this->dimensions()) ; 
    172       ret&=buffer.put(this->numElements()) ; 
    173       ret&=buffer.put(this->dataFirst(),this->numElements()) ; 
    174       return ret ; 
    175     } 
    176      
    177     
    178    virtual bool fromBuffer(CBufferIn& buffer) 
    179    { 
    180  
    181     bool ret ; 
    182     int numDim ; 
    183     TinyVector<int,N_rank> vect; 
    184     size_t ne; 
    185        
    186     ret=buffer.get(numDim) ; 
    187     ret&=buffer.get(vect.data(),N_rank) ; 
    188     this->resize(vect) ; 
    189     ret&=buffer.get(ne) ; 
    190     ret&=buffer.get(this->dataFirst(),ne) ; 
    191      return ret ; 
    192   } 
    193  
    194 } ; 
    195   
     16  template <typename T_numtype,int N_rank> 
     17  class CArray : public Array<T_numtype,N_rank>, public virtual CBaseType 
     18  { 
     19    private: 
     20      bool initialized; 
     21 
     22    public: 
     23      typedef typename Array<T_numtype,N_rank>::T_default_storage T_default_storage; 
     24      using Array<T_numtype,N_rank>::operator =; 
     25 
     26      template<typename T_expr> explicit CArray(_bz_ArrayExpr<T_expr> expr) 
     27        : Array<T_numtype,N_rank>(expr) 
     28        , initialized(true) 
     29      {} 
     30 
     31      CArray(GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     32        : Array<T_numtype,N_rank>(storage) 
     33        , initialized(false) 
     34      {} 
     35 
     36      explicit CArray(int length0, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     37        : Array<T_numtype,N_rank>(length0, storage) 
     38        , initialized(true) 
     39      {} 
     40 
     41      CArray(int length0, int length1, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     42        : Array<T_numtype,N_rank>(length0, length1, storage) 
     43        , initialized(true) 
     44      {} 
     45 
     46      CArray(int length0, int length1, int length2, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     47        : Array<T_numtype,N_rank>(length0, length1, length2, storage) 
     48        , initialized(true) 
     49      {} 
     50 
     51      CArray(int length0, int length1, int length2, int length3, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     52        : Array<T_numtype,N_rank>(length0, length1, length2, length3, storage) 
     53        , initialized(true) 
     54      {} 
     55 
     56      CArray(int length0, int length1, int length2, int length3, int length4, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     57        : Array<T_numtype,N_rank>(length0,length1, length2, length3, length4, storage) 
     58        , initialized(true) 
     59      {} 
     60 
     61      CArray(int length0, int length1, int length2, int length3, int length4, int length5, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     62        : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, storage) 
     63        , initialized(true) 
     64      {} 
     65 
     66      CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     67        : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, storage) 
     68        , initialized(true) 
     69      {} 
     70 
     71      CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7, 
     72             GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     73        : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, storage) 
     74        , initialized(true) 
     75      {} 
     76 
     77      CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, 
     78             int length7, int length8, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     79       : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, storage) 
     80       , initialized(true) 
     81      {} 
     82 
     83      CArray(int length0, int length1, int length2, int length3, int length4, 
     84             int length5, int length6, int length7, int length8, int length9, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     85        : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, storage) 
     86        , initialized(true) 
     87      {} 
     88 
     89      CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, 
     90             int length7, int length8, int length9, int length10, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     91       : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, length10, storage) 
     92       , initialized(true) 
     93      {} 
     94 
     95      CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     96        : Array<T_numtype,N_rank>(dataFirst, shape, storage) 
     97        , initialized(true) 
     98      {} 
     99 
     100      CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride, 
     101             GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     102        : Array<T_numtype,N_rank>(dataFirst, shape, stride, storage) 
     103        , initialized(true) 
     104      {} 
     105 
     106      CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, preexistingMemoryPolicy deletionPolicy, 
     107            GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     108        : Array<T_numtype,N_rank>(dataFirst, shape, deletionPolicy, storage) 
     109        , initialized(true) 
     110      {} 
     111 
     112      CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride, 
     113             preexistingMemoryPolicy deletionPolicy, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     114        : Array<T_numtype,N_rank>(dataFirst, shape, stride, deletionPolicy, storage) 
     115        , initialized(true) 
     116      {} 
     117 
     118      CArray(const TinyVector<int, N_rank>& extent, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     119        : Array<T_numtype,N_rank>(extent, storage) 
     120        , initialized(true) 
     121      {} 
     122 
     123      CArray(const TinyVector<int, N_rank>& lbounds, const TinyVector<int, N_rank>& extent, 
     124             const GeneralArrayStorage<N_rank>& storage) 
     125        : Array<T_numtype,N_rank>(lbounds, extent, storage) 
     126        , initialized(true) 
     127      {} 
     128 
     129      CArray(Range r0, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     130        : Array<T_numtype,N_rank>(r0, storage) 
     131        , initialized(true) 
     132      {} 
     133 
     134      CArray(Range r0, Range r1, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     135        : Array<T_numtype,N_rank>(r0, r1, storage) 
     136        , initialized(true) 
     137      {} 
     138 
     139      CArray(Range r0, Range r1, Range r2, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     140        : Array<T_numtype,N_rank>(r0, r1, r2, storage) 
     141        , initialized(true) 
     142      {} 
     143 
     144      CArray(Range r0, Range r1, Range r2, Range r3, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     145        : Array<T_numtype,N_rank>(r0, r1, r2, r3, storage) 
     146        , initialized(true) 
     147      {} 
     148 
     149      CArray(Range r0, Range r1, Range r2, Range r3, Range r4, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     150        : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, storage) 
     151        , initialized(true) 
     152      {} 
     153 
     154      CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     155        : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, storage) 
     156        , initialized(true) 
     157      {} 
     158 
     159      CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, 
     160             GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     161        : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, storage) 
     162        , initialized(true) 
     163      {} 
     164 
     165      CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, 
     166             GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     167        : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, storage) 
     168        , initialized(true) 
     169      {} 
     170 
     171      CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
     172             Range r6, Range r7, Range r8, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     173        : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, storage) 
     174        , initialized(true) 
     175      {} 
     176 
     177      CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
     178             Range r6, Range r7, Range r8, Range r9, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     179        : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, storage) 
     180        , initialized(true) 
     181      {} 
     182 
     183      CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, 
     184             Range r8, Range r9, Range r10, GeneralArrayStorage<N_rank> storage = T_default_storage()) 
     185        : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, storage) 
     186        , initialized(true) 
     187      {} 
     188 
     189      CArray(const CArray<T_numtype, N_rank>& array) 
     190        : Array<T_numtype,N_rank>(array) 
     191        , initialized(array.initialized) 
     192      {} 
     193 
     194      CArray(const Array<T_numtype, N_rank>& array) 
     195        : Array<T_numtype,N_rank>(array) 
     196        , initialized(true) 
     197      {} 
     198 
     199      CArray(const TinyVector<int,N_rank-1>& shape, int lastExtent, const GeneralArrayStorage<N_rank>& storage) 
     200        : Array<T_numtype,N_rank>(shape, lastExtent, storage) 
     201        , initialized(true) 
     202      {} 
     203 
     204      CArray(Array<T_numtype, N_rank>& array, Range r0) 
     205        : Array<T_numtype,N_rank>(array, r0) 
     206        , initialized(true) 
     207      {} 
     208 
     209      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1) 
     210        : Array<T_numtype,N_rank>(array, r0, r1) 
     211        , initialized(true) 
     212      {} 
     213 
     214      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2) 
     215        : Array<T_numtype,N_rank>( array, r0, r1, r2) 
     216        , initialized(true) 
     217      {} 
     218 
     219      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3) 
     220        : Array<T_numtype,N_rank>(array, r0, r1, r2, r3) 
     221        , initialized(true) 
     222      {} 
     223 
     224      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, 
     225             Range r3, Range r4) 
     226        : Array<T_numtype,N_rank>(array, r0, r1, r2, r3,  r4) 
     227        , initialized(true) 
     228      {} 
     229 
     230      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, 
     231             Range r3, Range r4, Range r5) 
     232        : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5) 
     233        , initialized(true) 
     234      {} 
     235 
     236      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, 
     237             Range r4, Range r5, Range r6) 
     238        : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5, r6) 
     239        , initialized(true) 
     240      {} 
     241 
     242      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, 
     243             Range r5, Range r6, Range r7) 
     244        : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7) 
     245        , initialized(true) 
     246      {} 
     247 
     248      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
     249             Range r6, Range r7, Range r8) 
     250        : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8) 
     251        , initialized(true) 
     252      {} 
     253 
     254      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, 
     255             Range r6, Range r7, Range r8, Range r9) 
     256        : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9) 
     257        , initialized(true) 
     258      {} 
     259 
     260      CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, 
     261             Range r7, Range r8, Range r9, Range r10) 
     262        : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) 
     263        , initialized(true) 
     264      {} 
     265 
     266      CArray(Array<T_numtype, N_rank>& array, const RectDomain<N_rank>& subdomain) 
     267        : Array<T_numtype,N_rank>(array, subdomain) 
     268        , initialized(true) 
     269      {} 
     270 
     271      CArray(Array<T_numtype, N_rank>& array, const StridedDomain<N_rank>& subdomain) 
     272        : Array<T_numtype,N_rank>(array, subdomain) 
     273        , initialized(true) 
     274      {} 
     275 
     276      template<int N_rank2, typename R0, typename R1, typename R2, typename R3, typename R4, typename R5, 
     277                            typename R6, typename R7, typename R8, typename R9, typename R10> 
     278      CArray(Array<T_numtype,N_rank2>& array, R0 r0, R1 r1, R2 r2, R3 r3, R4 r4, R5 r5, R6 r6, R7 r7, R8 r8, R9 r9, R10 r10) 
     279        : Array<T_numtype,N_rank>(array, r0,r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) 
     280        , initialized(true) 
     281      {} 
     282 
     283      virtual ~CArray() {} 
     284 
     285      CArray<T_numtype, N_rank> copy() const 
     286      { 
     287        CArray<T_numtype, N_rank> copy = Array<T_numtype, N_rank>::copy(); 
     288        copy.initialized = initialized; 
     289        return copy; 
     290      } 
     291 
     292      void reference(const CArray<T_numtype, N_rank>& array) 
     293      { 
     294        Array<T_numtype,N_rank>::reference(array); 
     295        initialized = array.initialized; 
     296      } 
     297 
     298      void reference(const Array<T_numtype,N_rank>& array) 
     299      { 
     300        Array<T_numtype,N_rank>::reference(array); 
     301        initialized = true; 
     302      } 
     303 
     304      void resize(int extent) 
     305      { 
     306        Array<T_numtype,N_rank>::resize(extent); 
     307        initialized = true; 
     308      } 
     309      void resize(int extent1, int extent2) 
     310      { 
     311        Array<T_numtype,N_rank>::resize(extent1, extent2); 
     312        initialized = true; 
     313      } 
     314      void resize(int extent1, int extent2, int extent3) 
     315      { 
     316        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3); 
     317        initialized = true; 
     318      } 
     319      void resize(int extent1, int extent2, int extent3, int extent4) 
     320      { 
     321        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4); 
     322        initialized = true; 
     323      } 
     324      void resize(int extent1, int extent2, int extent3, int extent4, int extent5) 
     325      { 
     326        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4, extent5); 
     327        initialized = true; 
     328      } 
     329      void resize(int extent1, int extent2, int extent3, int extent4, int extent5, int extent6) 
     330      { 
     331        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4, extent5, extent6); 
     332        initialized = true; 
     333      } 
     334      void resize(int extent1, int extent2, int extent3, int extent4, int extent5, 
     335                  int extent6, int extent7) 
     336      { 
     337        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4, extent5, 
     338                                        extent6, extent7); 
     339        initialized = true; 
     340      } 
     341      void resize(int extent1, int extent2, int extent3, int extent4, int extent5, 
     342                  int extent6, int extent7, int extent8) 
     343      { 
     344        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4, extent5, 
     345                                        extent6, extent7, extent8); 
     346        initialized = true; 
     347      } 
     348      void resize(int extent1, int extent2, int extent3, int extent4, int extent5, 
     349                  int extent6, int extent7, int extent8, int extent9) 
     350      { 
     351        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4, extent5, 
     352                                        extent6, extent7, extent8, extent9); 
     353        initialized = true; 
     354      } 
     355      void resize(int extent1, int extent2, int extent3, int extent4, int extent5, 
     356                  int extent6, int extent7, int extent8, int extent9, int extent10) 
     357      { 
     358        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4, extent5, 
     359                                        extent6, extent7, extent8, extent9, extent10); 
     360        initialized = true; 
     361      } 
     362      void resize(int extent1, int extent2, int extent3, int extent4, int extent5, int extent6, 
     363                  int extent7, int extent8, int extent9, int extent10, int extent11) 
     364      { 
     365        Array<T_numtype,N_rank>::resize(extent1, extent2, extent3, extent4, extent5, extent6, 
     366                                        extent7, extent8, extent9, extent10, extent11); 
     367        initialized = true; 
     368      } 
     369 
     370      void resize(Range r1) 
     371      { 
     372        Array<T_numtype,N_rank>::resize(r1); 
     373        initialized = true; 
     374      } 
     375      void resize(Range r1, Range r2) 
     376      { 
     377        Array<T_numtype,N_rank>::resize(r1, r2); 
     378        initialized = true; 
     379      } 
     380      void resize(Range r1, Range r2, Range r3) 
     381      { 
     382        Array<T_numtype,N_rank>::resize(r1, r2, r3); 
     383        initialized = true; 
     384      } 
     385      void resize(Range r1, Range r2, Range r3, Range r4) 
     386      { 
     387        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4); 
     388        initialized = true; 
     389      } 
     390      void resize(Range r1, Range r2, Range r3, Range r4, Range r5) 
     391      { 
     392        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4, r5); 
     393        initialized = true; 
     394      } 
     395      void resize(Range r1, Range r2, Range r3, Range r4, Range r5, Range r6) 
     396      { 
     397        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4, r5, r6); 
     398        initialized = true; 
     399      } 
     400      void resize(Range r1, Range r2, Range r3, Range r4, Range r5, 
     401                  Range r6, Range r7) 
     402      { 
     403        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4, r5, 
     404                                        r6, r7); 
     405        initialized = true; 
     406      } 
     407      void resize(Range r1, Range r2, Range r3, Range r4, Range r5, 
     408                  Range r6, Range r7, Range r8) 
     409      { 
     410        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4, r5, 
     411                                        r6, r7, r8); 
     412        initialized = true; 
     413      } 
     414      void resize(Range r1, Range r2, Range r3, Range r4, Range r5, 
     415                  Range r6, Range r7, Range r8, Range r9) 
     416      { 
     417        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4, r5, 
     418                                        r6, r7, r8, r9); 
     419        initialized = true; 
     420      } 
     421      void resize(Range r1, Range r2, Range r3, Range r4, Range r5, 
     422                  Range r6, Range r7, Range r8, Range r9, Range r10) 
     423      { 
     424        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4, r5, 
     425                                        r6, r7, r8, r9, r10); 
     426        initialized = true; 
     427      } 
     428      void resize(Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, 
     429                  Range r7, Range r8, Range r9, Range r10, Range r11) 
     430      { 
     431        Array<T_numtype,N_rank>::resize(r1, r2, r3, r4, r5, r6, 
     432                                        r7, r8, r9, r10, r11); 
     433        initialized = true; 
     434      } 
     435 
     436      void resize(const TinyVector<int,N_rank>& extent) 
     437      { 
     438        Array<T_numtype,N_rank>::resize(extent); 
     439        initialized = true; 
     440      } 
     441 
     442      void resizeAndPreserve(const TinyVector<int,N_rank>& extent) 
     443      { 
     444        Array<T_numtype,N_rank>::resizeAndPreserve(extent); 
     445        initialized = true; 
     446      } 
     447 
     448      void resizeAndPreserve(int extent) 
     449      { 
     450        Array<T_numtype,N_rank>::resizeAndPreserve(extent); 
     451        initialized = true; 
     452      } 
     453      void resizeAndPreserve(int extent1, int extent2) 
     454      { 
     455        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2); 
     456        initialized = true; 
     457      } 
     458      void resizeAndPreserve(int extent1, int extent2, int extent3) 
     459      { 
     460        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3); 
     461        initialized = true; 
     462      } 
     463      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4) 
     464      { 
     465        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4); 
     466        initialized = true; 
     467      } 
     468      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4, int extent5) 
     469      { 
     470        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4, extent5); 
     471        initialized = true; 
     472      } 
     473      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4, 
     474                             int extent5, int extent6) 
     475      { 
     476        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4, 
     477                                                   extent5, extent6); 
     478        initialized = true; 
     479      } 
     480      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4, 
     481                             int extent5, int extent6, int extent7) 
     482      { 
     483        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4, 
     484                                                   extent5, extent6, extent7); 
     485        initialized = true; 
     486      } 
     487      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4, 
     488                             int extent5, int extent6, int extent7, int extent8) 
     489      { 
     490        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4, 
     491                                                   extent5, extent6, extent7, extent8); 
     492        initialized = true; 
     493      } 
     494      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4, int extent5, 
     495                             int extent6, int extent7, int extent8, int extent9) 
     496      { 
     497        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4, extent5, 
     498                                                   extent6, extent7, extent8, extent9); 
     499        initialized = true; 
     500      } 
     501      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4, int extent5, 
     502                             int extent6, int extent7, int extent8, int extent9, int extent10) 
     503      { 
     504        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4, extent5, 
     505                                                   extent6, extent7, extent8, extent9, extent10); 
     506        initialized = true; 
     507      } 
     508      void resizeAndPreserve(int extent1, int extent2, int extent3, int extent4, int extent5, int extent6, 
     509                             int extent7, int extent8, int extent9, int extent10, int extent11) 
     510      { 
     511        Array<T_numtype,N_rank>::resizeAndPreserve(extent1, extent2, extent3, extent4, extent5, extent6, 
     512                                                   extent7, extent8, extent9, extent10, extent11); 
     513        initialized = true; 
     514      } 
     515 
     516      virtual void fromString(const string& str) { istringstream iss(str); iss >> *this; initialized = true; } 
     517      virtual string toString(void) const { ostringstream oss; oss << *this; return oss.str(); } 
     518      virtual void reset(void) { this->free(); initialized = false; } 
     519      virtual bool isEmpty(void) const { return !initialized; } 
     520      virtual size_t size(void) const { return (this->dimensions() + 1) * sizeof(int) + sizeof(size_t) + this->numElements() * sizeof(T_numtype); } 
     521 
     522      virtual CBaseType* clone(void) const { return new CArray(*this); } 
     523 
     524      virtual bool toBuffer(CBufferOut& buffer) const 
     525      { 
     526        bool ret; 
     527        ret =  buffer.put(this->dimensions()); 
     528        ret &= buffer.put(this->shape().data(), this->dimensions()); 
     529        ret &= buffer.put(this->numElements()); 
     530        ret &= buffer.put(this->dataFirst(), this->numElements()); 
     531        return ret; 
     532      } 
     533 
     534      virtual bool fromBuffer(CBufferIn& buffer) 
     535      { 
     536        bool ret; 
     537        int numDim; 
     538        TinyVector<int,N_rank> vect; 
     539        size_t ne; 
     540 
     541        ret =  buffer.get(numDim); 
     542        ret &= buffer.get(vect.data(), N_rank); 
     543        this->resize(vect); 
     544        ret &= buffer.get(ne); 
     545        ret &= buffer.get(this->dataFirst(), ne); 
     546 
     547        initialized = true; 
     548 
     549        return ret; 
     550      } 
     551  }; 
     552 
    196553  template <typename T_numtype,int N_rank> inline CBufferOut& operator<<(CBufferOut& buffer, const CArray<T_numtype,N_rank>& array) 
    197554  { 
    198     if (!array.toBuffer(buffer)) ERROR(" template <typename T_numtype,int N_rank> inline CBufferOut& operator<<(CBufferOut& buffer, const CArray& array)", 
    199                                         << "Buffer remain size is to low for size type") ; 
    200     return buffer ; 
     555    if (!array.toBuffer(buffer)) ERROR("template <typename T_numtype,int N_rank> inline CBufferOut& operator<<(CBufferOut& buffer, const CArray& array)", 
     556                                       << "Buffer remain size is to low for size type"); 
     557    return buffer; 
    201558  } 
    202559 
     
    204561  { 
    205562    if (!array.fromBuffer(buffer)) ERROR("template <typename T_numtype,int N_rank> inline CBufferIn& operator>>(CBufferIn& buffer, CArray& array)", 
    206                                         <<"Buffer remain size is to low for size type"); 
    207     return buffer ; 
     563                                         << "Buffer remain size is to low for size type"); 
     564    return buffer; 
    208565  } 
    209   
     566 
    210567  template <typename T_numtype,int N_rank> inline CMessage& operator<<(CMessage& msg, const CArray<T_numtype, N_rank>& array) 
    211568  { 
    212     msg.push(array) ; 
    213     return msg ; 
     569    msg.push(array); 
     570    return msg; 
    214571  } 
    215572 
    216573  template <typename T_numtype,int N_rank> inline CMessage& operator<<(CMessage& msg, CArray<T_numtype, N_rank>& array) 
    217574  { 
    218     msg.push(array) ; 
    219     return msg ; 
     575    msg.push(array); 
     576    return msg; 
    220577  } 
    221  
    222   
    223578} 
    224579 
Note: See TracChangeset for help on using the changeset viewer.