OpendTect  6.6
arraynd.h
Go to the documentation of this file.
1 #pragma once
2 /*
3 ________________________________________________________________________
4 
5  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
6  Author: K. Tingdahl
7  Date: 9-3-1999
8  RCS: $Id$
9 ________________________________________________________________________
10 
11 */
12 
13 #include "basicmod.h"
14 #include "valseries.h"
15 #include "arrayndinfo.h"
16 #include "varlenarray.h"
17 #include "odmemory.h"
18 #include "ptrman.h"
19 
31 template <class T>
33 {
34 public:
35 
36  virtual ~ArrayND() {}
37 
38  virtual inline bool isOK() const;
39  virtual inline bool isEmpty() const;
40 
41  virtual T getND(const int*) const = 0;
42  virtual bool isSettable() const { return true; }
43  virtual void setND(const int*,T) = 0;
44 
45  inline const ValueSeries<T>* getStorage() const
46  { return getStorage_(); }
48  virtual bool canSetStorage() const { return false; }
49  virtual bool setStorage(ValueSeries<T>* s)
50  { delete s; return true; }
54  inline const T* getData() const
55  { return getData_(); }
56  inline T* getData();
57  virtual const T* get1D(const int*) const;
58  virtual T* get1D(const int*);
59  virtual int get1DDim() const;
60 
61 
62  virtual const ArrayNDInfo& info() const = 0;
63  virtual bool canSetInfo() const
64  { return false; }
65  virtual bool canChangeNrDims() const
66  { return false; }
67  virtual bool setInfo( const ArrayNDInfo& )
68  { return false; }
69 
70  virtual void setAll(T);
71  virtual void getAll(T* ptr) const;
76  virtual void getAll(ValueSeries<T>& vs) const;
82  // rank/size info
83  inline int nrDims() const
84  { return info().getNDim(); }
85  inline int getSize( int dim ) const
86  { return info().getSize(dim); }
87  inline od_uint64 totalSize() const
88  { return info().getTotalSz(); }
89  inline bool validPos( int* pos ) const
90  { return info().validPos(pos); }
91 protected:
92 
93  virtual const ValueSeries<T>* getStorage_() const { return 0; }
94 
95  virtual const T* getData_() const
96  {
97  if ( getStorage_() )
98  return getStorage()->arr();
99  return 0;
100  }
101 };
102 
103 
108 template <class T>
109 mClass(Basic) Array1D : public ArrayND<T>
110  , public ValueSeries<T>
111 {
112 public:
113 
114  virtual void set(int,T) = 0;
115  virtual T get(int) const = 0;
116  void setND(const int* pos,T v) { set( pos[0], v ); }
117  T getND(const int* pos) const
118  { return get(pos[0]); }
119 
120  // implement ValueSeries interface
121  T value(od_int64 i) const { return get( (int) i);}
122  bool writable() const { return true; }
123  void setValue(od_int64 i,T t){ set( (int) i,t); }
124  virtual void setAll( T t ) { ArrayND<T>::setAll(t); }
125 
126  virtual const Array1DInfo& info() const = 0;
127 
128  inline T operator []( int idx ) const
129  { return get( idx ); }
130 
131 };
132 
133 
138 template <class T>
139 mClass(Basic) Array2D : public ArrayND<T>
140 {
141 public:
142  virtual void set( int, int, T ) = 0;
143  virtual T get( int p0, int p1 ) const = 0;
144  void setND( const int* pos, T v )
145  { set( pos[0], pos[1], v);}
146  T getND( const int* pos ) const
147  { return get( pos[0], pos[1] ); }
148 
149  virtual T** get2DData() { return 0; }
150  virtual const T** get2DData() const { return 0; }
151 
152  virtual const Array2DInfo& info() const = 0;
153 };
154 
155 
160 template <class T>
161 mClass(Basic) Array3D : public ArrayND<T>
162 {
163 public:
164 
165  virtual void set( int, int, int, T ) = 0;
166  virtual T get( int p0, int p1, int p2 ) const = 0;
167  void setND( const int* pos, T v )
168  { set( pos[0], pos[1], pos[2], v);}
169  T getND( const int* pos ) const
170  { return get( pos[0], pos[1], pos[2] ); }
171 
172  virtual T*** get3DData() { return 0; }
173  virtual const T*** get3DData() const { return 0; }
174 
175  virtual const Array3DInfo& info() const = 0;
176 };
177 
178 
181 template <class T>
182 mClass(Basic) Array4D : public ArrayND<T>
183 {
184 public:
186 
187  virtual void set(int,int,int,int,T)= 0;
188  virtual T get(int,int,int,int) const = 0;
189  void setND( const int* pos, T v )
190  { set( pos[0], pos[1], pos[2], pos[3], v ); }
191  T getND( const int* pos ) const
192  { return get( pos[0], pos[1], pos[2], pos[3] );}
193 
194  virtual T**** get4DData() { return 0; }
195  virtual const T**** get4DData() const { return 0; }
196 
197  virtual const Array4DInfo& info() const = 0;
198 };
199 
209 {
210 public:
213 
214  bool next();
215  void reset();
216 
217  bool setGlobalPos(od_int64);
218 
219  template <class T> void inline setPos(const T& idxabl);
220  const int* getPos() const { return position_; }
221  int operator[](int) const;
222 
223 protected:
224 
225  bool inc(int);
226 
227  int* position_;
228  const ArrayNDInfo& sz_;
229 
230 };
231 
232 #define mArrayNDVSAdapterNrDim 20
233 
234 
241 template <class T>
243 {
244 public:
246  : array_( a )
247  {
248  if ( array_.getData() || array_.getStorage() )
249  {
250  pErrMsg("Not a good idea to use adapter. "
251  "Use getStorage() instead");
252  }
253  }
254 
255  bool isOK() const
256  {
257  if ( array_.info().getNDim()>mArrayNDVSAdapterNrDim)
258  {
259  pErrMsg( "Too many dimensions");
260  return false;
261  }
262 
263  return true;
264  }
265 
267  { return new ArrayNDValseriesAdapter<T>( *this ); }
268 
269  T value(od_int64 idx) const
270  {
271  int pos[mArrayNDVSAdapterNrDim];
272  array_.info().getArrayPos( idx, pos );
273  return array_.getND( pos );
274  }
275 
276  const T* arr() const { return array_.getData(); }
277  T* arr() { return 0; }
278 
279 protected:
280 
282 };
283 
284 
285 template <class T> inline void ArrayNDIter::setPos( const T& idxable )
286 {
287  for ( int idx=sz_.getNDim()-1; idx>=0; idx-- )
288  position_[idx] = idxable[idx];
289 }
290 
291 
292 inline
294 {
295  return sz_.getArrayPos(globalidx,position_);
296 }
297 
298 #define mDefArrayNDStdMembers(nd) \
299 public: \
300  Array##nd##Conv(Array##nd<TT>* arr) \
301  : arr_(arr) {} \
302  ~Array##nd##Conv() { delete arr_; } \
303  \
304  const Array##nd##Info& info() const { return arr_->info(); } \
305  \
306 protected: \
307  \
308  Array##nd<TT>* arr_; \
309  \
310 public:
311 
312 #define mDefArrayNDConverter(nd) \
313 template <class T, class TT> \
314 class Array##nd##Conv : public Array##nd<T> \
315 { mDefArrayNDStdMembers(nd);
316 
317 
318 
319 template <class T, class TT>
320 class Array1DConv : public Array1D<T>
322 public:
323  T get( int p0 ) const
324  { return (T)arr_->get( p0 ); }
325  void set( int p0, T v )
326  { arr_->set( p0, (TT)v ); }
327 
328 };
329 
330 
331 template <class T, class TT>
332 class Array2DConv : public Array2D<T>
334  T get( int p0, int p1 ) const
335  { return (T)arr_->get( p0, p1 ); }
336  void set( int p0, int p1, T v )
337  { arr_->set( p0, p1, (TT)v ); }
338 
339 };
340 
341 template <class T, class TT>
342 class Array3DConv : public Array3D<T>
344 
345  T get( int p0, int p1, int p2 ) const
346  { return (T)arr_->get( p0, p1, p2 ); }
347  void set( int p0, int p1, int p2, T v )
348  { arr_->set( p0, p1, p2, (TT)v ); }
349 
350 };
351 
352 
353 template <class T, class TT>
354 class Array4DConv : public Array4D<T>
356 
357  T get( int p0, int p1, int p2, int p3 ) const
358  { return (T)arr_->get( p0, p1, p2, p3 ); }
359  void set( int p0, int p1, int p2, int p3, T v )
360  { arr_->set( p0, p1, p2, p3, (TT)v ); }
361 
362 };
363 
364 // Only implementations below
365 
366 template <class T> inline
367 bool ArrayND<T>::isOK() const
368 {
369  return getStorage() ? getStorage()->isOK() : true;
370 }
371 
372 
373 template <class T> inline
375 {
376  return !isOK() || info().getTotalSz() == 0;
377 }
378 
379 
380 template <class T> inline
381 const T* ArrayND<T>::get1D( const int* i ) const
382 {
383  const T* ptr = getData();
384  if ( !ptr ) return 0;
385 
386  int ndim = info().getNDim();
387 
388  mAllocLargeVarLenArr( int, pos, ndim );
389  OD::memCopy(pos,i, (int) sizeof(int)*(ndim-1));
390 
391  pos[ndim-1] = 0;
392 
393  return &ptr[info().getOffset( pos )];
394 }
395 
396 
397 template <class T> inline
399 { return info().getNDim()-1; }
400 
401 
402 template <class T> inline
404 {
405  return !isSettable() ? 0
406  : const_cast<T*>(((const ArrayND*)this)->getData_());
407 }
408 
409 
410 template <class T> inline
412 {
413  return !isSettable() ? 0 :
414  const_cast<ValueSeries<T>* >(((const ArrayND*)this)->getStorage_());
415 }
416 
417 
418 template <class T> inline
419 T* ArrayND<T>::get1D( const int* i )
420 {
421  return !isSettable() ? 0 : const_cast<T*>(((const ArrayND*)this)->get1D(i));
422 }
423 
424 
425 template <class T> inline
426 void ArrayND<T>::setAll( T val )
427 {
428  if ( isEmpty() )
429  return;
430 
431  ValueSeries<T>* stor = getStorage();
432  if ( stor )
433  {
434  if ( stor->canSetAll() )
435  stor->setAll( val );
436  else
437  {
438  MemSetter<T> setter( *stor, val, info().getTotalSz() );
439  setter.execute();
440  }
441 
442  return;
443  }
444 
445  ArrayNDIter iterator( info() );
446  do
447  {
448  setND( iterator.getPos(), val );
449  } while ( iterator.next() );
450 }
451 
456 template <class T>
458 {
459 public:
460  ArrayNDDataExtracter( T* ptr, const ArrayND<T>& arr )
461  : ptr_( ptr )
462  , arr_( arr )
463  , totalnr_( arr.info().getTotalSz() )
464  , vs_( 0 )
465  {}
466 
468  : ptr_( vs.arr() )
469  , arr_( arr )
470  , totalnr_( arr.info().getTotalSz() )
471  , vs_( vs.arr() ? 0 : &vs )
472  {}
473 
474  bool doWork( od_int64 start, od_int64 stop, int )
475  {
476  mAllocVarLenArr( int, pos, arr_.info().getNDim() );
477  if ( !arr_.info().getArrayPos( start, pos ) )
478  return false;
479 
480  ArrayNDIter iterator( arr_.info() );
481  iterator.setPos( (int*) pos );
482 
483  if ( vs_ )
484  {
485  for ( od_int64 idx=start; idx<=stop; idx++ )
486  {
487  vs_->setValue( idx,
488  arr_.getND( iterator.getPos() ) );
489  if ( idx==stop )
490  break;
491 
492  if ( !iterator.next() )
493  return false;
494  }
495  }
496  else
497  {
498  T* res = ptr_ + start;
499  for ( od_int64 idx=start; idx<=stop; idx++, res++ )
500  {
501  *res = arr_.getND( iterator.getPos() );
502  if ( idx==stop )
503  break;
504 
505  if ( !iterator.next() )
506  return false;
507  }
508  }
509 
510  return true;
511  }
512 
513  od_int64 nrIterations() const { return totalnr_; }
514 
515 protected:
516 
518  const ArrayND<T>& arr_;
519  T* ptr_;
521 
522 };
523 
524 
525 template <class T> inline
527 {
528  if ( vs.arr() )
529  { getAll( vs.arr() ); return; }
530 
531  const od_int64 totalsz = info().getTotalSz();
532  if ( !totalsz )
533  return;
534 
535  const ValueSeries<T>* stor = getStorage();
536  if ( stor )
537  stor->getValues( vs, totalsz );
538  else
539  {
540  ArrayNDDataExtracter<T> extr( vs, *this );
541  extr.execute();
542  }
543 }
544 
545 
546 template <class T> inline
547 void ArrayND<T>::getAll( T* ptr ) const
548 {
549  const od_int64 totalsz = info().getTotalSz();
550  if ( !totalsz )
551  return;
552 
553  const T* tdata = getData();
554  if ( tdata )
555  OD::memCopy( ptr, tdata, totalsz * sizeof(T) );
556  else
557  {
558  const ValueSeries<T>* stor = getStorage();
559  if ( stor )
560  {
561  MemCopier<T> cpier( ptr, *stor, totalsz );
562  cpier.execute();
563  }
564  else
565  {
566  ArrayNDDataExtracter<T> extr( ptr, *this );
567  extr.execute();
568  }
569  }
570 }
571 
572 
ArrayND::getStorage_
virtual const ValueSeries< T > * getStorage_() const
Definition: arraynd.h:93
ArrayND::canSetInfo
virtual bool canSetInfo() const
Definition: arraynd.h:63
ValueSeries
Interface to a series of values.
Definition: odmemory.h:16
od_uint64
#define od_uint64
Definition: plftypes.h:36
ArrayNDValseriesAdapter
Adapter that makes any ArrayND to a (slow) value series.
Definition: arraynd.h:243
Array1D::value
T value(int64_t i) const
Definition: arraynd.h:121
ArrayND::~ArrayND
virtual ~ArrayND()
Definition: arraynd.h:36
Array4D
4-Dim ArrayND
Definition: arraynd.h:183
MemCopier
ValueSeries Copier.
Definition: odmemory.h:89
ArrayNDValseriesAdapter::isOK
bool isOK() const
Definition: arraynd.h:255
Array4D::set
virtual void set(int, int, int, int, T)=0
Array2DInfo
Contains the information about the size of Array2D, and in what order the data is stored (if accessab...
Definition: arrayndinfo.h:124
ArrayND::get1D
virtual const T * get1D(const int *) const
Definition: arraynd.h:381
Array2D::get
virtual T get(int p0, int p1) const =0
ArrayNDIter::ArrayNDIter
ArrayNDIter(const ArrayNDInfo &)
ArrayND::get1DDim
virtual int get1DDim() const
Definition: arraynd.h:398
ArrayND::get1D
virtual T * get1D(const int *)
Definition: arraynd.h:419
odmemory.h
ArrayNDInfo
Contains the information about the size of ArrayND, and in what order the data is stored (if accessab...
Definition: arrayndinfo.h:25
ArrayNDDataExtracter::ArrayNDDataExtracter
ArrayNDDataExtracter(T *ptr, const ArrayND< T > &arr)
Definition: arraynd.h:460
ParallelTask::execute
bool execute()
Definition: paralleltask.h:70
Array2DConv::set
void set(int p0, int p1, T v)
Definition: arraynd.h:336
Array1D::set
virtual void set(int, T)=0
Array1DConv::arr_
Array1D< TT > * arr_
Definition: arraynd.h:321
Array4D::get4DData
virtual const T **** get4DData() const
Definition: arraynd.h:195
valseries.h
Array1D::setValue
void setValue(int64_t i, T t)
Definition: arraynd.h:123
Array4DConv::set
void set(int p0, int p1, int p2, int p3, T v)
Definition: arraynd.h:359
ValueSeries::canSetAll
virtual bool canSetAll() const
Definition: valseries.h:47
ArrayNDValseriesAdapter::ArrayNDValseriesAdapter
ArrayNDValseriesAdapter(const ArrayND< T > &a)
Definition: arraynd.h:245
od_int64
#define od_int64
Definition: plftypes.h:35
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Array3D::set
virtual void set(int, int, int, T)=0
Array3D::info
virtual const Array3DInfo & info() const =0
ArrayNDDataExtracter::totalnr_
int64_t totalnr_
Definition: arraynd.h:517
Array1DConv::get
T get(int p0) const
Definition: arraynd.h:323
ArrayND::canChangeNrDims
virtual bool canChangeNrDims() const
Definition: arraynd.h:65
varlenarray.h
ArrayNDValseriesAdapter::array_
const ArrayND< T > & array_
Definition: arraynd.h:281
ArrayND::getSize
int getSize(int dim) const
Definition: arraynd.h:85
Array2DConv
Definition: arraynd.h:333
ArrayNDIter::~ArrayNDIter
~ArrayNDIter()
ArrayNDIter::inc
bool inc(int)
ArrayND::getStorage
const ValueSeries< T > * getStorage() const
Definition: arraynd.h:45
ArrayNDIter::sz_
const ArrayNDInfo & sz_
Definition: arraynd.h:228
Array4D::info
virtual const Array4DInfo & info() const =0
ArrayNDIter::position_
int * position_
Definition: arraynd.h:227
Array1D
Array1D ( Subclass of ArrayND ) is a one dimensional array.
Definition: arraynd.h:111
ArrayND::getData
T * getData()
Definition: arraynd.h:403
ArrayND::getStorage
ValueSeries< T > * getStorage()
Definition: arraynd.h:411
ArrayNDDataExtracter
Gets a one dimensional array from an ArrayND.
Definition: arraynd.h:458
ArrayND::isOK
virtual bool isOK() const
Definition: arraynd.h:367
Array1D::setAll
virtual void setAll(T t)
Definition: arraynd.h:124
Array1D::info
virtual const Array1DInfo & info() const =0
ArrayNDValseriesAdapter::value
T value(int64_t idx) const
Definition: arraynd.h:269
ArrayND::setND
virtual void setND(const int *, T)=0
Array1DConv::set
void set(int p0, T v)
Definition: arraynd.h:325
isEmpty
bool isEmpty(const NLAModel *mdl)
ArrayNDIter::reset
void reset()
Array3DConv::arr_
Array3D< TT > * arr_
Definition: arraynd.h:343
arrayndinfo.h
Array3D
Array3D ( Subclass of ArrayND ) is a three dimensional array.
Definition: arraynd.h:162
Array3DConv::set
void set(int p0, int p1, int p2, T v)
Definition: arraynd.h:347
Array2D::get2DData
virtual const T ** get2DData() const
Definition: arraynd.h:150
ArrayNDIter::setPos
void setPos(const T &idxabl)
Definition: arraynd.h:285
ArrayNDDataExtracter::vs_
ValueSeries< T > * vs_
Definition: arraynd.h:520
ArrayND::info
virtual const ArrayNDInfo & info() const =0
mDefArrayNDStdMembers
#define mDefArrayNDStdMembers(nd)
Definition: arraynd.h:298
ArrayNDIter::setGlobalPos
bool setGlobalPos(int64_t)
Definition: arraynd.h:293
ArrayNDDataExtracter::ArrayNDDataExtracter
ArrayNDDataExtracter(ValueSeries< T > &vs, const ArrayND< T > &arr)
Definition: arraynd.h:467
ptrman.h
ArrayNDValseriesAdapter::arr
T * arr()
Definition: arraynd.h:277
Array4DConv::arr_
Array4D< TT > * arr_
Definition: arraynd.h:355
ArrayNDDataExtracter::nrIterations
int64_t nrIterations() const
Definition: arraynd.h:513
mClass
#define mClass(module)
Definition: commondefs.h:181
Array4DConv::get
T get(int p0, int p1, int p2, int p3) const
Definition: arraynd.h:357
Array1DInfo
Contains the information about the size of Array1D, and in what order the data is stored (if accessab...
Definition: arrayndinfo.h:100
ArrayNDIter::getPos
const int * getPos() const
Definition: arraynd.h:220
ArrayNDIter
Iterates through all samples in an ArrayND.
Definition: arraynd.h:209
Array1D::setND
void setND(const int *pos, T v)
Definition: arraynd.h:116
ArrayNDIter::next
bool next()
Array4D::get4DData
virtual T **** get4DData()
Definition: arraynd.h:194
mTypeDefArrNDTypes
#define mTypeDefArrNDTypes
Definition: arrayndinfo.h:65
Array4DInfo
Contains the information about the size of Array4D, and in what order the data is stored (if accessab...
Definition: arrayndinfo.h:166
mArrayNDVSAdapterNrDim
#define mArrayNDVSAdapterNrDim
Definition: arraynd.h:232
ArrayND::totalSize
uint64_t totalSize() const
Definition: arraynd.h:87
Array3D::get3DData
virtual T *** get3DData()
Definition: arraynd.h:172
Array4D::setND
void setND(const int *pos, T v)
Definition: arraynd.h:189
Array3D::get
virtual T get(int p0, int p1, int p2) const =0
ArrayND::setStorage
virtual bool setStorage(ValueSeries< T > *s)
Definition: arraynd.h:49
pErrMsg
#define pErrMsg(msg)
Usual access point for programmer error messages.
Definition: errmsg.h:37
Conv::set
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
Array3DInfo
Contains the information about the size of Array3D, and in what order the data is stored (if accessab...
Definition: arrayndinfo.h:147
Array4D::get
virtual T get(int, int, int, int) const =0
Array2D::setND
void setND(const int *pos, T v)
Definition: arraynd.h:144
Array2D::info
virtual const Array2DInfo & info() const =0
Array4D::getND
T getND(const int *pos) const
Definition: arraynd.h:191
Array2D::getND
T getND(const int *pos) const
Definition: arraynd.h:146
ArrayND::getND
virtual T getND(const int *) const =0
ParallelTask
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:66
ArrayNDInfo::getArrayPos
virtual bool getArrayPos(uint64_t, int *) const
mAllocLargeVarLenArr
#define mAllocLargeVarLenArr(type, varnm, __size)
Definition: varlenarray.h:30
ArrayND::setInfo
virtual bool setInfo(const ArrayNDInfo &)
Definition: arraynd.h:67
ArrayNDDataExtracter::doWork
bool doWork(int64_t start, int64_t stop, int)
Definition: arraynd.h:474
ArrayNDDataExtracter::arr_
const ArrayND< T > & arr_
Definition: arraynd.h:518
Array1D::writable
bool writable() const
Definition: arraynd.h:122
Array1DConv
Definition: arraynd.h:321
Array3DConv::get
T get(int p0, int p1, int p2) const
Definition: arraynd.h:345
Array3D::getND
T getND(const int *pos) const
Definition: arraynd.h:169
ArrayNDValseriesAdapter::clone
ValueSeries< T > * clone() const
Definition: arraynd.h:266
Array1D::getND
T getND(const int *pos) const
Definition: arraynd.h:117
ArrayNDDataExtracter::ptr_
T * ptr_
Definition: arraynd.h:519
ArrayND::isEmpty
virtual bool isEmpty() const
Definition: arraynd.h:374
ArrayND::getData_
virtual const T * getData_() const
Definition: arraynd.h:95
ArrayND::getAll
virtual void getAll(ValueSeries< T > &vs) const
Definition: arraynd.h:526
ArrayND::nrDims
int nrDims() const
Definition: arraynd.h:83
ArrayND::validPos
bool validPos(int *pos) const
Definition: arraynd.h:89
ValueSeries::getValues
void getValues(ValueSeries< T > &, int64_t nrvals) const
Definition: valseries.h:255
Array4DConv
Definition: arraynd.h:355
Array2D::get2DData
virtual T ** get2DData()
Definition: arraynd.h:149
mAllocVarLenArr
#define mAllocVarLenArr(type, varnm, __size)
Definition: varlenarray.h:53
ArrayND
An ArrayND is an array with a given number of dimensions and a size.
Definition: arraynd.h:33
ArrayND::setAll
virtual void setAll(T)
Definition: arraynd.h:426
ValueSeries::setAll
virtual void setAll(T)
Definition: valseries.h:48
Array3D::get3DData
virtual const T *** get3DData() const
Definition: arraynd.h:173
ArrayNDInfo::getNDim
virtual int getNDim() const =0
ArrayND::isSettable
virtual bool isSettable() const
Definition: arraynd.h:42
ArrayND::getAll
virtual void getAll(T *ptr) const
Definition: arraynd.h:547
Array2D::set
virtual void set(int, int, T)=0
Array3DConv
Definition: arraynd.h:343
ArrayND::canSetStorage
virtual bool canSetStorage() const
Definition: arraynd.h:48
ArrayNDIter::operator[]
int operator[](int) const
Array3D::setND
void setND(const int *pos, T v)
Definition: arraynd.h:167
Array2DConv::get
T get(int p0, int p1) const
Definition: arraynd.h:334
Array1D::get
virtual T get(int) const =0
ArrayNDValseriesAdapter::arr
const T * arr() const
Definition: arraynd.h:276
MemSetter
Sets large amounts of values to a constant using multiple threads.
Definition: odmemory.h:42
Array2DConv::arr_
Array2D< TT > * arr_
Definition: arraynd.h:333
Array2D
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:140
ArrayND::getData
const T * getData() const
Definition: arraynd.h:54
ValueSeries::arr
virtual T * arr()
Definition: valseries.h:55

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021