OpendTect  6.3
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 ________________________________________________________________________
10 
11 -*/
12 
13 #include "basicmod.h"
14 #include "odmemory.h"
15 #include "paralleltask.h"
16 
17 
23 template <class T>
24 mClass(Basic) ValueSeries
25 {
26 public:
27 
28  typedef T ValueType;
29 
30  virtual ~ValueSeries() {}
31 
32  void getValues(ValueSeries<T>&,od_int64 nrvals) const;
33  void getValues(T*,od_int64 nrvals) const;
34 
35  virtual ValueSeries<T>* clone() const = 0;
36  virtual bool isOK() const { return true; }
37 
38  virtual T value(od_int64) const = 0;
39  virtual bool writable() const { return false; }
40  virtual void setValue(od_int64,T) {}
41 
42  virtual bool canSetAll() const { return false; }
43  virtual void setAll(T) {}
44 
45  virtual bool reSizeable() const { return false; }
46  virtual bool setSize(od_int64) { return false; }
47 
48  virtual T* arr() { return 0; }
49  virtual const T* arr() const { return 0; }
50 
51  virtual char bytesPerItem() const { return sizeof(T); }
52 
53  inline T operator[](od_int64 idx) const { return value(idx); }
54 };
55 
56 
59 template <class T>
61 {
62 public:
63 
65  od_int64 nrelements )
66  : from_( from )
67  , to_( &to )
68  , toptr_( 0 )
69  , nrelements_( nrelements )
70 {
71 }
72 
73 ValueSeriesGetAll(const ValueSeries<T>& from, T* to, od_int64 nrelements )
74  : from_( from )
75  , toptr_( to )
76  , to_( 0 )
77  , nrelements_( nrelements )
78 {
79 }
80 
82 {
83  return nrelements_;
84 }
85 
86 bool doWork( od_int64 start, od_int64 stop, int )
87 {
88  od_int64 nrleft = stop-start+1;
89  const T* fromarr = from_.arr();
90  T* toarr = toptr_ ? toptr_ : to_->arr();
91  if ( toarr && fromarr )
92  OD::memCopy( toarr+start, fromarr+start,
93  (size_t) (nrleft*from_.bytesPerItem()) );
94  else if ( toarr )
95  {
96  toarr += start;
97  for ( od_int64 idx=start; idx<=stop; idx++, toarr++ )
98  *toarr = from_.value( idx );
99  }
100  else if ( fromarr )
101  {
102  fromarr += start;
103  for ( od_int64 idx=start; idx<=stop; idx++, fromarr++ )
104  to_->setValue(idx, *fromarr );
105  }
106  else
107  {
108  for ( od_int64 idx=start; idx<=stop; idx++ )
109  to_->setValue(idx,from_.value(idx));
110  }
111 
112  return true;
113 }
114 
115 protected:
116 
120  T* toptr_;
121 
122 };
123 
124 
125 template <class T> inline
127 {
128  ValueSeriesGetAll<T> setter( *this, to, nrvals );
129  setter.execute();
130 }
131 
132 
133 template <class T> inline
134 void ValueSeries<T>::getValues( T* to, od_int64 nrvals ) const
135 {
136  ValueSeriesGetAll<T> setter( *this, to, nrvals );
137  setter.execute();
138 }
void getValues(ValueSeries< T > &, int64_t nrvals) const
Definition: valseries.h:126
T operator[](int64_t idx) const
Definition: valseries.h:53
T to(const F &fr)
Definition: convert.h:31
bool doWork(int64_t start, int64_t stop, int)
Definition: valseries.h:86
ValueSeriesGetAll(const ValueSeries< T > &from, ValueSeries< T > &to, int64_t nrelements)
Definition: valseries.h:64
int64_t nrIterations() const
Definition: valseries.h:81
#define od_int64
Definition: plftypes.h:34
virtual bool reSizeable() const
Definition: valseries.h:45
ValueSeries< T > * to_
Definition: valseries.h:119
virtual bool setSize(int64_t)
Definition: valseries.h:46
Gets data from ValueSeries.
Definition: valseries.h:60
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:64
virtual bool isOK() const
Definition: valseries.h:36
virtual bool writable() const
Definition: valseries.h:39
T * toptr_
Definition: valseries.h:120
ValueSeriesGetAll(const ValueSeries< T > &from, T *to, int64_t nrelements)
Definition: valseries.h:73
bool execute()
Definition: paralleltask.h:69
Interface to a series of values.
Definition: odmemory.h:15
int64_t nrelements_
Definition: valseries.h:117
virtual void setValue(int64_t, T)
Definition: valseries.h:40
virtual void setAll(T)
Definition: valseries.h:43
virtual char bytesPerItem() const
Definition: valseries.h:51
T ValueType
Definition: valseries.h:28
virtual bool canSetAll() const
Definition: valseries.h:42
#define mClass(module)
Definition: commondefs.h:161
const ValueSeries< T > & from_
Definition: valseries.h:118
virtual T * arr()
Definition: valseries.h:48
virtual ~ValueSeries()
Definition: valseries.h:30
virtual const T * arr() const
Definition: valseries.h:49

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