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

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