OpendTect  6.6
valseries.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Bert Bril & Kris Tingdahl
8  Date: Mar 2005
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "basicmod.h"
15 #include "gendefs.h"
16 #include "hiddenparam.h"
17 #include "odmemory.h"
18 
19 #ifdef __debug__
20 # include "debug.h"
21 #endif
22 
23 
30 template <class T>
31 mClass(Basic) ValueSeries
32 {
33 public:
34 
35  virtual ~ValueSeries() {}
36 
37  void getValues(ValueSeries<T>&,od_int64 nrvals) const;
38  void getValues(T*,od_int64 nrvals) const;
39 
40  virtual ValueSeries<T>* clone() const = 0;
41  virtual bool isOK() const { return true; }
42 
43  virtual T value(od_int64) const = 0;
44  virtual bool writable() const { return false; }
45  virtual void setValue(od_int64,T) {}
46 
47  virtual bool canSetAll() const { return false; }
48  virtual void setAll(T) {}
49 
50  virtual bool selfSufficient() const { return false; }
52  virtual bool reSizeable() const { return false; }
53  virtual bool setSize(od_int64) { return false; }
54 
55  virtual T* arr() { return 0; }
56  virtual const T* arr() const { return 0; }
57 
58  virtual char bytesPerItem() const { return sizeof(T); }
59 
60  inline T operator[](od_int64 idx) const { return value(idx); }
61 };
62 
63 
68 template <class T>
70 {
71 public:
72  inline OffsetValueSeries( ValueSeries<T>& src, od_int64 off );
73  inline OffsetValueSeries( const ValueSeries<T>& src,
74  od_int64 off);
76 
77  inline ValueSeries<T>* clone() const;
78 
79  inline T value( od_int64 idx ) const;
80  inline void setValue( od_int64 idx, T v );
81  inline T* arr();
82  inline const T* arr() const;
83  inline bool writable() const;
84  inline bool canSetAll() const;
85  inline void setAll(T);
86 
87  inline od_int64 getOffset() const;
88  inline void setOffset(od_int64 no);
89 
90  const ValueSeries<T>& source() const { return src_; }
91 
92  inline bool setSize(od_int64);
93 
94 protected:
97  bool writable_;
98 };
99 
100 
101 #include <typeinfo>
102 
103 #define mImplArr \
104 { return typeid(RT)==typeid(AT) ? (RT*) ptr_ : (RT*) 0;}
105 
112 template <class RT, class AT>
114 {
115 public:
116  ArrayValueSeries( AT* ptr, bool memmine, od_int64 sz=-1 );
118  ~ArrayValueSeries() { if ( mine_ ) delete [] ptr_; }
119 
121 
122  bool isOK() const { return ptr_; }
123 
124  RT value( od_int64 idx ) const;
125  bool writable() const { return true; }
126  void setValue( od_int64 idx, RT v );
127 
128  bool canSetAll() const { return writable(); }
129  void setAll(RT);
130 
131  const RT* arr() const mImplArr;
132  RT* arr() mImplArr;
133 
134  bool selfSufficient() const { return mine_; }
135  bool reSizeable() const { return mine_; }
136  inline bool setSize(od_int64);
137  od_int64 size() const { return cursize_; }
138  char bytesPerItem() const { return sizeof(AT); }
139 
140 protected:
141 
142  AT* ptr_;
143  bool mine_;
145 };
146 
147 #undef mImplArr
148 
149 #define mChunkSize mMaxContiguousMemSize
150 
157 template <class RT, class AT>
159 {
160 public:
164 
165  ValueSeries<RT>* clone() const;
166 
167  bool isOK() const { return cursize_>=0; }
168 
169  RT value( od_int64 idx ) const;
170  bool writable() const { return true; }
171  void setValue(od_int64 idx, RT v);
172 
173  bool canSetAll() const { return writable(); }
174  void setAll(RT);
175 
176  const RT* arr() const;
177  RT* arr();
178 
179  bool selfSufficient() const { return true; }
180  bool reSizeable() const { return true; }
181  inline bool setSize(od_int64);
182  od_int64 size() const { return cursize_; }
183  char bytesPerItem() const { return sizeof(AT); }
184 
185 protected:
189 };
190 
191 
196 template <class T>
198 {
199 public:
201  ValueSeries<T>& to, od_int64 nriterations )
202  : from_( from )
203  , to_( &to )
204  , toptr_( 0 )
205  , nriterations_( nriterations )
206  {}
207 
209  od_int64 nriterations )
210  : from_( from )
211  , toptr_( to )
212  , to_( 0 )
213  , nriterations_( nriterations )
214  {}
215 
216 od_int64 nrIterations() const { return nriterations_; }
217 bool doWork( od_int64 start, od_int64 stop, int )
218  {
219  od_int64 nrleft = stop-start+1;
220  const T* fromarr = from_.arr();
221  T* toarr = toptr_ ? toptr_ : to_->arr();
222  if ( toarr && fromarr )
223  OD::sysMemCopy( toarr+start, fromarr+start,
224  (size_t) (nrleft*from_.bytesPerItem()) );
225  else if ( toarr )
226  {
227  toarr += start;
228  for ( od_int64 idx=start; idx<=stop; idx++, toarr++ )
229  *toarr = from_.value( idx );
230  }
231  else if ( fromarr )
232  {
233  fromarr += start;
234  for ( od_int64 idx=start; idx<=stop; idx++, fromarr++ )
235  to_->setValue(idx, *fromarr );
236  }
237  else
238  {
239  for ( od_int64 idx=start; idx<=stop; idx++ )
240  to_->setValue(idx,from_.value(idx));
241  }
242 
243  return true;
244  }
245 
246 protected:
251 };
252 
253 
254 template <class T> inline
256 {
257  ValueSeriesGetAll<T> setter( *this, to, nrvals );
258  setter.execute();
259 }
260 
261 
262 template <class T> inline
263 void ValueSeries<T>::getValues( T* to, od_int64 nrvals ) const
264 {
265  ValueSeriesGetAll<T> setter( *this, to, nrvals );
266  setter.execute();
267 }
268 
269 
270 template <class RT, class AT> inline
272 { return new MultiArrayValueSeries<RT,AT>( *this ); }
273 
274 
275 // OffsetValueSeries
276 template <class T>
278 
279 template <class T> inline
281  : src_( src ), off_( off ), writable_(true)
282 {
283  cursizes<T>.setParam( this, 0 );
284 }
285 
286 
287 template <class T> inline
289  : src_( const_cast<ValueSeries<T>& >(src) ), off_( off ), writable_(false)
290 {
291  cursizes<T>.setParam( this, 0 );
292 }
293 
294 
295 template <class T> inline
297 {
298  cursizes<T>.removeParam( this );
299 }
300 
301 
302 template <class T> inline
304 { return new OffsetValueSeries( src_, off_ ); }
305 
306 
307 template <class T> inline
309 { return src_.value(idx+off_); }
310 
311 template <class T> inline
313 {
314  if ( writable_ )
315  src_.setValue(idx+off_,v);
316  else
317  { pErrMsg("Attempting to write to write-protected array"); }
318 }
319 
320 
321 template <class T> inline
323 {
324  if ( writable_ )
325  {
326  const od_int64 cursize = cursizes<T>.getParam( this );
327  const od_int64 lastidx = off_ + cursize - 1;
328 /*
329 Virtual function size() not implemented in 6.6. Hope for the best.
330  if ( lastidx >= src_.size() )
331  lastidx = size()-1;
332 */
333  const od_int64 nrsamps = lastidx - off_ + 1;
334  T* arrvals = arr();
335  if ( arrvals )
336  {
337  if ( !arrvals || nrsamps<=0 )
338  return;
339 
340  const T* stopptr = arrvals + nrsamps;
341  while ( arrvals != stopptr )
342  *arrvals++ = v;
343 
344  return;
345  }
346 
347  for ( od_int64 idx=off_; idx<lastidx; idx++ )
348  src_.setValue( idx, v );
349  }
350  else
351  { pErrMsg("Attempting to write to write-protected array"); }
352 }
353 
354 
355 
356 template <class T> inline
358 { return writable_ && src_.canSetAll(); }
359 
360 
361 template <class T> inline
363 { T* p = src_.arr(); return p ? p+off_ : 0; }
364 
365 
366 template <class T> inline
368 { T* p = src_.arr(); return p ? p+off_ : 0; }
369 
370 
371 template <class T> inline
373 { return off_; }
374 
375 
376 template <class T> inline
378 { off_ = no; }
379 
380 
381 template <class T> inline
383 { return writable_; }
384 
385 
386 template <class T> inline
388 {
389  cursizes<T>.setParam( this, sz );
390  return true;
391 }
392 
393 
394 // ArrayValueSeries
395 template <class RT, class AT>
397  : ptr_(ptr), mine_(memmine), cursize_( cursz )
398 {}
399 
400 
401 template <class RT, class AT>
403  : ptr_( 0 ), mine_(true), cursize_( -1 )
404 {
405  setSize( sz );
406 }
407 
408 
409 template <class RT, class AT>
411 {
412  AT* ptr = ptr_;
413  if ( mine_ && cursize_>0 )
414  {
415  ptr = new AT[cursize_];
416  OD::memCopy( ptr, ptr_, sizeof(AT)*cursize_ );
417  }
418 
419  return new ArrayValueSeries( ptr, mine_, cursize_ );
420 }
421 
422 
423 template <class RT, class AT>
425 {
426 #ifdef __debug__
427  if ( idx<0 || (cursize_>=0 && idx>=cursize_ ) )
428  {
429  pErrMsg("Invalid access");
430  DBG::forceCrash(true);
431  }
432 #endif
433 
434  return (RT) ptr_[idx];
435 }
436 
437 
438 template <class RT, class AT>
440 {
441 #ifdef __debug__
442  if ( idx<0 || (cursize_>=0 && idx>=cursize_ ) )
443  {
444  pErrMsg("Invalid access");
445  DBG::forceCrash(true);
446  }
447 #endif
448 
449  ptr_[idx] = (AT) v;
450 }
451 
452 
453 template <class RT, class AT>
455 {
456  OD::memValueSet( ptr_, (AT)val, cursize_ );
457 }
458 
459 
460 template <class RT,class AT> inline
462 {
463  if ( cursize_!=-1 && cursize_==sz && ptr_ ) return true;
464  if ( !mine_ ) return false;
465 
466  AT* oldptr = ptr_;
467  if ( sz )
468  {
469  mTryAlloc( ptr_, AT[sz] );
470  }
471  else
472  ptr_ = 0;
473 
474  const od_int64 copysize = mMIN(sz,cursize_);
475  cursize_ = ptr_ ? sz : -1;
476  if ( ptr_ && copysize>0 )
477  OD::memCopy( ptr_, oldptr, (size_t) (copysize*sizeof(AT)) );
478 
479  delete [] oldptr;
480  return ptr_;
481 }
482 
483 
484 template <class RT, class AT> inline
486  : cursize_( -1 )
487  , chunksize_( mChunkSize/sizeof(AT) )
488 {
490  setSize( sz );
491 }
492 
493 
494 template <class RT, class AT> inline
496  const MultiArrayValueSeries<RT, AT>& mavs )
497  : ValueSeries<RT>( mavs )
498  , cursize_( -1 )
499  , chunksize_( mavs.chunksize_ )
500 {
502  if ( setSize( mavs.cursize_ ) && ptrs_.size() == mavs.ptrs_.size() )
503  {
504  for ( int idx=0; idx<ptrs_.size(); idx++ )
505  {
506  const od_int64 nextstart = ((od_int64) idx+1)*chunksize_;
507  od_int64 curchunksize = chunksize_;
508  if ( nextstart>cursize_ )
509  {
510  od_int64 diff = nextstart-cursize_;
511  curchunksize -= diff;
512  }
513  OD::memCopy( ptrs_[idx], mavs.ptrs_[idx], curchunksize*sizeof(AT) );
514  }
515  }
516 }
517 
518 
519 template <class RT, class AT> inline
521 {
522  deepEraseArr( ptrs_ );
523 }
524 
525 
526 template <class RT, class AT> inline
528 {
529 #ifdef __debug__
530  if ( idx<0 || idx>=cursize_ )
531  {
532  pErrMsg("Invalid access");
533  DBG::forceCrash(true);
534  }
535 #endif
536  const od_int64 arridx = idx/chunksize_;
537  if ( !ptrs_.validIdx(arridx) )
538  return RT();
539 
540  idx -= arridx*chunksize_;
541  return ptrs_[mCast(int,arridx)][idx];
542 }
543 
544 
545 template <class RT, class AT> inline
547 {
548 #ifdef __debug__
549  if ( idx<0 || idx>=cursize_ )
550  {
551  pErrMsg("Invalid access");
552  DBG::forceCrash(true);
553  }
554 #endif
555  const od_int64 arridx = idx/chunksize_;
556  if ( arridx>=ptrs_.size() )
557  return;
558 
559  idx -= arridx*chunksize_;
560  ptrs_[mCast(int,arridx)][idx] = v;
561 }
562 
563 
564 template <class RT, class AT> inline
566 {
567  if ( cursize_<=0 )
568  return;
569 
570  MemSetter<AT> memsetter;
571  memsetter.setValue( (AT)val );
572 
573  for ( int idx=ptrs_.size()-1; idx>=0; idx-- )
574  {
575  const od_int64 nextstart = ((od_int64) idx+1)*chunksize_;
576  od_int64 curchunksize = chunksize_;
577  if ( nextstart>cursize_ )
578  {
579  od_int64 diff = nextstart-cursize_;
580  curchunksize -= diff;
581  }
582 
583  memsetter.setTarget( ptrs_[idx] );
584  memsetter.setSize( curchunksize );
585  memsetter.execute();
586  }
587 }
588 
589 
590 template <class RT, class AT> inline
592 {
593  return cursize_>0 && cursize_<=chunksize_ && typeid(RT)==typeid(AT)
594  ? (RT*) ptrs_[0] : (RT*) 0;
595 }
596 
597 
598 template <class RT, class AT> inline
600 { return const_cast<MultiArrayValueSeries<RT,AT>*>( this )->arr(); }
601 
602 
603 template <class RT, class AT> inline
605 {
606  if ( cursize_==sz )
607  return true;
608 
609  od_uint64 lefttoalloc = sz > 0 ? (od_uint64)sz : 0;
610  deepEraseArr( ptrs_ );
611 
612  while ( lefttoalloc )
613  {
614  const od_uint64 allocsize = lefttoalloc>=chunksize_
615  ? (od_uint64)chunksize_ : lefttoalloc;
616 
617  AT* ptr;
618  mTryAlloc( ptr, AT[allocsize] );
619  if ( !ptr )
620  {
621  cursize_ = -1;
622  deepEraseArr( ptrs_ );
623  return false;
624  }
625 
626  ptrs_ += ptr;
627 
628  if ( lefttoalloc > allocsize )
629  lefttoalloc -= allocsize;
630  else
631  lefttoalloc = 0;
632  }
633 
634  cursize_ = sz;
635  return true;
636 }
637 
638 #undef mChunkSize
639 
ValueSeries
Interface to a series of values.
Definition: odmemory.h:16
od_uint64
#define od_uint64
Definition: plftypes.h:36
OffsetValueSeries::writable
bool writable() const
Definition: valseries.h:382
MultiArrayValueSeries::setValue
void setValue(int64_t idx, RT v)
Definition: valseries.h:546
OD::memValueSet
void memValueSet(T *, T, int64_t, TaskRunner *taskrun=0)
Definition: odmemory.h:479
MultiArrayValueSeries::isOK
bool isOK() const
Definition: valseries.h:167
MultiArrayValueSeries::selfSufficient
bool selfSufficient() const
Definition: valseries.h:179
Conv::to
T to(const F &fr)
Definition: convert.h:34
ArrayValueSeries::~ArrayValueSeries
~ArrayValueSeries()
Definition: valseries.h:118
OffsetValueSeries::setSize
bool setSize(int64_t)
Definition: valseries.h:387
odmemory.h
ArrayValueSeries::value
RT value(int64_t idx) const
Definition: valseries.h:424
cursizes
static HiddenParam< OffsetValueSeries< T >, int64_t > cursizes(0)
HiddenParam
Workaround manager when you cannot add class members to a class due to binary compability issues.
Definition: hiddenparam.h:54
ObjectSet< AT >
ParallelTask::execute
bool execute()
Definition: paralleltask.h:70
MultiArrayValueSeries::bytesPerItem
char bytesPerItem() const
Definition: valseries.h:183
ObjectSet::setNullAllowed
void setNullAllowed(bool yn=true)
Definition: objectset.h:371
ArrayValueSeries::setAll
void setAll(RT)
Definition: valseries.h:454
ValueSeriesGetAll::doWork
bool doWork(int64_t start, int64_t stop, int)
Definition: valseries.h:217
MultiArrayValueSeries
Valueseries that allocates its data in smaller chunks. By doing this, it performs better in environme...
Definition: valseries.h:159
ValueSeries::value
virtual T value(int64_t) const =0
MultiArrayValueSeries::cursize_
int64_t cursize_
Definition: valseries.h:187
ArrayValueSeries::mine_
bool mine_
Definition: valseries.h:143
OffsetValueSeries::setAll
void setAll(T)
Definition: valseries.h:322
ValueSeries::canSetAll
virtual bool canSetAll() const
Definition: valseries.h:47
ValueSeriesGetAll
Gets ValueSeries.
Definition: valseries.h:198
mImplArr
#define mImplArr
Definition: valseries.h:103
od_int64
#define od_int64
Definition: plftypes.h:35
MemSetter::setTarget
void setTarget(T *ptr)
Definition: odmemory.h:52
MultiArrayValueSeries::setSize
bool setSize(int64_t)
Definition: valseries.h:604
ValueSeries::setSize
virtual bool setSize(int64_t)
Definition: valseries.h:53
ValueSeries::bytesPerItem
virtual char bytesPerItem() const
Definition: valseries.h:58
MemSetter::setValue
void setValue(const T &val)
Definition: odmemory.h:51
MultiArrayValueSeries::size
int64_t size() const
Definition: valseries.h:182
OffsetValueSeries::arr
T * arr()
Definition: valseries.h:362
ArrayValueSeries::cursize_
int64_t cursize_
Definition: valseries.h:144
ValueSeries::reSizeable
virtual bool reSizeable() const
Definition: valseries.h:52
ArrayValueSeries::setValue
void setValue(int64_t idx, RT v)
Definition: valseries.h:439
MultiArrayValueSeries::ptrs_
ObjectSet< AT > ptrs_
Definition: valseries.h:186
ArrayValueSeries::ptr_
AT * ptr_
Definition: valseries.h:142
ObjectSet::size
size_type size() const
Definition: objectset.h:55
ArrayValueSeries::bytesPerItem
char bytesPerItem() const
Definition: valseries.h:138
deepEraseArr
void deepEraseArr(ObjectSet< T > &os)
empty the ObjectSet deleting all array objects pointed to.
Definition: objectset.h:164
MemSetter::setSize
void setSize(int64_t sz)
Definition: odmemory.h:54
OffsetValueSeries::src_
ValueSeries< T > & src_
Definition: valseries.h:95
ArrayValueSeries::setSize
bool setSize(int64_t)
Definition: valseries.h:461
mChunkSize
#define mChunkSize
Definition: valseries.h:149
OffsetValueSeries::setOffset
void setOffset(int64_t no)
Definition: valseries.h:377
ValueSeriesGetAll::to_
ValueSeries< T > * to_
Definition: valseries.h:249
hiddenparam.h
MultiArrayValueSeries::reSizeable
bool reSizeable() const
Definition: valseries.h:180
OffsetValueSeries
ValueSeries of offsets.
Definition: valseries.h:70
ArrayValueSeries::ArrayValueSeries
ArrayValueSeries(AT *ptr, bool memmine, int64_t sz=-1)
Definition: valseries.h:396
OffsetValueSeries::value
T value(int64_t idx) const
Definition: valseries.h:308
MultiArrayValueSeries::~MultiArrayValueSeries
~MultiArrayValueSeries()
Definition: valseries.h:520
Strat::RT
const RefTree & RT()
OffsetValueSeries::clone
ValueSeries< T > * clone() const
Definition: valseries.h:303
OffsetValueSeries::~OffsetValueSeries
~OffsetValueSeries()
Definition: valseries.h:296
ArrayValueSeries::isOK
bool isOK() const
Definition: valseries.h:122
OffsetValueSeries::canSetAll
bool canSetAll() const
Definition: valseries.h:357
mClass
#define mClass(module)
Definition: commondefs.h:181
ValueSeries::writable
virtual bool writable() const
Definition: valseries.h:44
ValueSeries::clone
virtual ValueSeries< T > * clone() const =0
ArrayValueSeries::arr
const RT * arr() const
Definition: valseries.h:131
mTryAlloc
#define mTryAlloc(var, stmt)
Catches bad_alloc and sets ptr to null as normal.
Definition: commondefs.h:246
ArrayValueSeries::writable
bool writable() const
Definition: valseries.h:125
gendefs.h
MultiArrayValueSeries::chunksize_
const int64_t chunksize_
Definition: valseries.h:188
ValueSeriesGetAll::ValueSeriesGetAll
ValueSeriesGetAll(const ValueSeries< T > &from, ValueSeries< T > &to, int64_t nriterations)
Definition: valseries.h:200
ValueSeries::selfSufficient
virtual bool selfSufficient() const
Definition: valseries.h:50
ArrayValueSeries::ArrayValueSeries
ArrayValueSeries(int64_t sz)
Definition: valseries.h:402
ValueSeries::arr
virtual const T * arr() const
Definition: valseries.h:56
OffsetValueSeries::source
const ValueSeries< T > & source() const
Definition: valseries.h:90
pErrMsg
#define pErrMsg(msg)
Usual access point for programmer error messages.
Definition: errmsg.h:37
ValueSeriesGetAll::toptr_
T * toptr_
Definition: valseries.h:250
OffsetValueSeries::setValue
void setValue(int64_t idx, T v)
Definition: valseries.h:312
OffsetValueSeries::OffsetValueSeries
OffsetValueSeries(ValueSeries< T > &src, int64_t off)
Definition: valseries.h:280
MultiArrayValueSeries::setAll
void setAll(RT)
Definition: valseries.h:565
OD::sysMemCopy
void sysMemCopy(void *, const void *, int64_t)
ParallelTask
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:66
mCast
#define mCast(tp, v)
Definition: commondefs.h:137
ArrayValueSeries::reSizeable
bool reSizeable() const
Definition: valseries.h:135
MultiArrayValueSeries::clone
ValueSeries< RT > * clone() const
Definition: valseries.h:271
OffsetValueSeries::off_
int64_t off_
Definition: valseries.h:96
ValueSeriesGetAll::from_
const ValueSeries< T > & from_
Definition: valseries.h:248
MultiArrayValueSeries::value
RT value(int64_t idx) const
Definition: valseries.h:527
mMIN
#define mMIN(x, y)
Definition: commondefs.h:62
ValueSeries::getValues
void getValues(ValueSeries< T > &, int64_t nrvals) const
Definition: valseries.h:255
MultiArrayValueSeries::MultiArrayValueSeries
MultiArrayValueSeries(int64_t)
Definition: valseries.h:485
MultiArrayValueSeries::canSetAll
bool canSetAll() const
Definition: valseries.h:173
ValueSeries::setValue
virtual void setValue(int64_t, T)
Definition: valseries.h:45
ValueSeries::setAll
virtual void setAll(T)
Definition: valseries.h:48
ValueSeries::operator[]
T operator[](int64_t idx) const
Definition: valseries.h:60
ValueSeriesGetAll::ValueSeriesGetAll
ValueSeriesGetAll(const ValueSeries< T > &from, T *to, int64_t nriterations)
Definition: valseries.h:208
ValueSeriesGetAll::nrIterations
int64_t nrIterations() const
Definition: valseries.h:216
ValueSeries::getValues
void getValues(T *, int64_t nrvals) const
Definition: valseries.h:263
OffsetValueSeries::getOffset
int64_t getOffset() const
Definition: valseries.h:372
DBG::forceCrash
void forceCrash(bool withdump)
ValueSeries::~ValueSeries
virtual ~ValueSeries()
Definition: valseries.h:35
OffsetValueSeries::writable_
bool writable_
Definition: valseries.h:97
ValueSeries::isOK
virtual bool isOK() const
Definition: valseries.h:41
ArrayValueSeries::size
int64_t size() const
Definition: valseries.h:137
ArrayValueSeries
Series of values from a pointer to some kind of array. If a more advanced conversion between the retu...
Definition: valseries.h:114
MultiArrayValueSeries::writable
bool writable() const
Definition: valseries.h:170
MemSetter
Sets large amounts of values to a constant using multiple threads.
Definition: odmemory.h:42
ArrayValueSeries::canSetAll
bool canSetAll() const
Definition: valseries.h:128
MultiArrayValueSeries::arr
const RT * arr() const
Definition: valseries.h:599
debug.h
ValueSeries::arr
virtual T * arr()
Definition: valseries.h:55
ValueSeriesGetAll::nriterations_
int64_t nriterations_
Definition: valseries.h:247
ArrayValueSeries::clone
ValueSeries< RT > * clone() const
Definition: valseries.h:410

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