OpendTect  6.6
convmemvalseries.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: Kris Tingdahl
8  Date: Oct 2006
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "valseries.h"
15 #include "datainterp.h"
16 #include "datachar.h"
17 #include "scaler.h"
18 #include "undefarray.h"
19 
20 
26 template <class T>
28 {
29 public:
30 
31  inline ConvMemValueSeries(od_int64 sz,
32  const BinDataDesc& stortype,
33  bool doundef=true,
34  const Scaler* scaler=0);
35 
36  inline ~ConvMemValueSeries();
37  inline bool isOK() const;
38 
39  ValueSeries<T>* clone() const;
40 
41  inline od_int64 size() const;
42  inline bool writable() const;
43  inline T value(od_int64 idx) const;
44  inline void setValue( od_int64 idx, T v );
45 
46  inline bool selfSufficient() const { return true; }
47  inline bool reSizeable() const { return true; }
48  inline bool setSize(od_int64);
49 
50  inline const T* arr() const;
51  inline T* arr();
52 
53  inline char* storArr();
54  inline const char* storArr() const;
55 
56  inline BinDataDesc dataDesc() const;
57  bool handlesUndef() const { return undefhandler_; }
58 
59 protected:
60 
64  const Scaler* scaler_;
65 
66  char* ptr_;
68 };
69 
70 
71 template <class T> inline
73  const BinDataDesc& stortype,
74  bool doundef,
75  const Scaler* scaler )
76  : ptr_( 0 )
77  , scaler_( scaler ? scaler->clone() : 0 )
78  , size_( -1 )
79  , interpreter_( DataCharacteristics(stortype) )
80  , undefhandler_( doundef ? new UndefArrayHandler(stortype) : 0 )
81 {
82  if ( undefhandler_ && !undefhandler_->isOK() )
83  { delete undefhandler_; undefhandler_ = 0; }
84 
85  T dummy;
86  rettype_ = BinDataDesc( dummy );
87  setSize( sz );
88 }
89 
90 
91 template <class T> inline
93 {
94  delete [] ptr_;
95  delete scaler_;
96  delete undefhandler_;
97 }
98 
99 
100 template <class T> inline
102 {
103  ConvMemValueSeries<T>* res = new ConvMemValueSeries( size_,
104  interpreter_.dataChar(), undefhandler_, scaler_ );
105  if ( storArr() )
106  OD::memCopy( res->storArr(), storArr(), size_ * interpreter_.nrBytes());
107 
108  return res;
109 }
110 
111 
112 
113 template <class T> inline
115 {
116  if ( undefhandler_ && !undefhandler_->isOK() )
117  return false;
118 
119  return ptr_;
120 }
121 
122 
123 template <class T> inline
125 {
126  if ( undefhandler_ && undefhandler_->isUdf( ptr_,idx ) )
127  return mUdf(T);
128 
129  const T val = interpreter_.get( ptr_, idx );
130  return mCast( T, scaler_ ? scaler_->unScale(val) : val );
131 }
132 
133 
134 template <class T> inline
136 {
137  if ( sz==size_ ) return true;
138 
139  delete [] ptr_;
140  mTryAlloc( ptr_, char[sz*interpreter_.nrBytes()] );
141  return ptr_;
142 }
143 
144 
145 template <class T> inline
147 { return true; }
148 
149 
150 template <class T> inline
152 { return size_; }
153 
154 
155 template <class T> inline
157 {
158  if ( undefhandler_ && mIsUdf(v) )
159  undefhandler_->setUdf( ptr_, idx );
160  else
161  {
162  const T val = mCast( T, scaler_ ? scaler_->scale(v) : v );
163  interpreter_.put( ptr_, idx, val );
164  if ( undefhandler_ ) undefhandler_->unSetUdf( ptr_, idx );
165  }
166 }
167 
168 
169 template <class T> inline
171 {
172  return interpreter_.dataChar() == rettype_
173  ? reinterpret_cast<const T*>(ptr_) : 0;
174 }
175 
176 template <class T> inline
178 { return interpreter_.dataChar()==rettype_ ? reinterpret_cast<T*>(ptr_) : 0; }
179 
180 
181 template <class T> inline
183 { return ptr_; }
184 
185 
186 template <class T> inline
188 { return ptr_; }
189 
190 
191 template <class T> inline
193 { return interpreter_.dataChar(); }
194 
195 
ValueSeries
Interface to a series of values.
Definition: odmemory.h:16
ConvMemValueSeries::value
T value(od_int64 idx) const
Definition: convmemvalseries.h:124
datachar.h
UndefArrayHandler
Class that handles undefvalues in arrays that are in a format described by a BinDataDesc.
Definition: undefarray.h:39
valseries.h
ConvMemValueSeries::isOK
bool isOK() const
Definition: convmemvalseries.h:114
UndefArrayHandler::isOK
bool isOK() const
ConvMemValueSeries::storArr
char * storArr()
Definition: convmemvalseries.h:182
mIsUdf
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
od_int64
#define od_int64
Definition: plftypes.h:35
ConvMemValueSeries::size
od_int64 size() const
Definition: convmemvalseries.h:151
ConvMemValueSeries::setValue
void setValue(od_int64 idx, T v)
Definition: convmemvalseries.h:156
datainterp.h
ConvMemValueSeries::selfSufficient
bool selfSufficient() const
Definition: convmemvalseries.h:46
scaler.h
DataInterpreter
Byte-level data interpreter.
Definition: cbvswriter.h:21
undefarray.h
ConvMemValueSeries::setSize
bool setSize(od_int64)
Definition: convmemvalseries.h:135
Scaler
Scaling of floating point numbers.
Definition: scaler.h:33
ConvMemValueSeries::interpreter_
DataInterpreter< T > interpreter_
Definition: convmemvalseries.h:62
ConvMemValueSeries::rettype_
BinDataDesc rettype_
Definition: convmemvalseries.h:63
ConvMemValueSeries::writable
bool writable() const
Definition: convmemvalseries.h:146
ConvMemValueSeries::scaler_
const Scaler * scaler_
Definition: convmemvalseries.h:64
ConvMemValueSeries::~ConvMemValueSeries
~ConvMemValueSeries()
Definition: convmemvalseries.h:92
mClass
#define mClass(module)
Definition: commondefs.h:181
mTryAlloc
#define mTryAlloc(var, stmt)
Catches bad_alloc and sets ptr to null as normal.
Definition: commondefs.h:246
BinDataDesc
Description of binary data.
Definition: bindatadesc.h:43
ConvMemValueSeries::clone
ValueSeries< T > * clone() const
Definition: convmemvalseries.h:101
ConvMemValueSeries::arr
const T * arr() const
Definition: convmemvalseries.h:170
mCast
#define mCast(tp, v)
Definition: commondefs.h:137
ConvMemValueSeries
Definition: convmemvalseries.h:28
ConvMemValueSeries::reSizeable
bool reSizeable() const
Definition: convmemvalseries.h:47
ConvMemValueSeries::ConvMemValueSeries
ConvMemValueSeries(od_int64 sz, const BinDataDesc &stortype, bool doundef=true, const Scaler *scaler=0)
Definition: convmemvalseries.h:72
mUdf
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
ConvMemValueSeries::handlesUndef
bool handlesUndef() const
Definition: convmemvalseries.h:57
ConvMemValueSeries::dataDesc
BinDataDesc dataDesc() const
Definition: convmemvalseries.h:192
ConvMemValueSeries::undefhandler_
UndefArrayHandler * undefhandler_
Definition: convmemvalseries.h:61
ConvMemValueSeries::ptr_
char * ptr_
Definition: convmemvalseries.h:66
DataCharacteristics
byte-level data characteristics of stored data.
Definition: datachar.h:37
ConvMemValueSeries::size_
od_int64 size_
Definition: convmemvalseries.h:67

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