OpendTect  6.6
hdf5arraynd.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: Bert
7  Date: March 2018
8 ________________________________________________________________________
9 
10 -*/
11 
12 #include "arrayndimpl.h"
13 #include "hdf5reader.h"
14 #include "hdf5writer.h"
15 #include "uistrings.h"
16 
17 
18 namespace HDF5
19 {
20 
21 template <class T> class ArrayNDTool
22 {
23 public:
25 
26  ArrayNDTool( const ArrayND<T>& arrnd )
27  : arrnd_(const_cast<ArrayND<T>&>(arrnd)) {}
29  : arrnd_(arrnd) {}
31  { delete [] workarr_; }
32 
33  inline static ArrayND<T>* createArray(const DataSetKey&,Reader&);
34  inline uiRetVal getAll(const DataSetKey&,Reader&);
35  inline uiRetVal getSlab(const DataSetKey&,Reader&,const SlabSpec&);
37 
38  inline uiRetVal createDataSet(Writer&,const DataSetKey&);
40  inline uiRetVal put(Writer&,const DataSetKey&);
42  inline uiRetVal putAll(Writer&,const DataSetKey&);
43  inline uiRetVal putSlab(Writer&,const DataSetKey&,const SlabSpec&);
46 
48  T* workarr_ = nullptr;
49 
50  inline T* getWorkArray(uiRetVal&);
51 
52 };
53 
54 
55 template <class T>
57  Reader& rdr )
58 {
59  uiRetVal uirv;
60  PtrMan<ArrayNDInfo> inf = rdr.getDataSizes( dsky, uirv );
61  if ( !inf )
62  return nullptr;
63 
64  return ArrayNDImpl<T>::create( *inf );
65 }
66 
67 
68 template <class T>
70 {
71  if ( workarr_ )
72  return workarr_;
73 
74  T* ret = arrnd_.getData();
75  if ( ret )
76  return ret;
77 
78  mTryAlloc( workarr_, T [ arrnd_.totalSize() ] );
79  if ( !workarr_ )
81 
82  return workarr_;
83 }
84 
85 
86 template <class T>
87 inline uiRetVal ArrayNDTool<T>::getAll( const DataSetKey& dsky, Reader& rdr )
88 {
89  uiRetVal uirv;
90  if ( arrnd_.totalSize() < 1 )
91  return uirv;
92 
93  T* arr = getWorkArray( uirv );
94  if ( arr )
95  {
96  uirv = rdr.getAll( dsky, arr );
97  if ( workarr_ )
98  arrnd_.setData( arr );
99  }
100 
101  return uirv;
102 }
103 
104 
105 template <class T>
107  const SlabSpec& spec )
108 {
109  uiRetVal uirv;
110  if ( arrnd_.totalSize() < 1 )
111  return uirv;
112 
113  T* arr = getWorkArray( uirv );
114  if ( arr )
115  {
116  uirv = rdr.getSlab( dsky, spec, arr );
117  if ( workarr_ )
118  arrnd_.setAll( arr );
119  }
120 
121  return uirv;
122 }
123 
124 
125 template <class T>
127  const DataSetKey& dsky )
128 {
129  uiRetVal uirv;
130  uirv = wrr.createDataSet( dsky, arrnd_.info(), OD::GetDataRepType<T>() );
131  return uirv;
132 }
133 
134 
135 template <class T>
136 inline uiRetVal ArrayNDTool<T>::put( Writer& wrr, const DataSetKey& dsky )
137 {
138  uiRetVal uirv;
139  if ( !wrr.hasDataSet(dsky) )
140  uirv = createDataSet( wrr, dsky );
141  if ( !uirv.isOK() )
142  return uirv;
143 
144  return putAll( wrr, dsky );
145 }
146 
147 
148 template <class T>
150 {
151  uiRetVal uirv;
152  if ( arrnd_.totalSize() < 1 )
153  return uirv;
154 
155  const T* arr = getWorkArray( uirv );
156  if ( arr )
157  {
158  if ( workarr_ )
159  arrnd_.getAll( const_cast<T*>(arr) );
160  uirv = wrr.putAll( dsky, arr );
161  }
162 
163  return uirv;
164 }
165 
166 
167 template <class T>
169  const SlabSpec& spec )
170 {
171  uiRetVal uirv;
172  if ( arrnd_.totalSize() < 1 )
173  return uirv;
174 
175  const T* arr = getWorkArray( uirv );
176  if ( arr )
177  {
178  if ( workarr_ )
179  arrnd_.getAll( const_cast<T*>(arr) );
180  uirv = wrr.putSlab( dsky, spec, arr );
181  }
182 
183  return uirv;
184 }
185 
186 
187 } // namespace HDF5
188 
hdf5reader.h
HDF5::ArrayNDTool::arrnd_
ArrayND< T > & arrnd_
Definition: hdf5arraynd.h:47
ArrayNDImpl::create
static ArrayND< T > * create(const ArrayNDInfo &nsz)
Definition: arrayndimpl.h:1029
HDF5::ArrayNDTool::ArrayNDTool
ArrayNDTool(ArrayND< T > &arrnd)
Definition: hdf5arraynd.h:28
HDF5::ArrayNDTool::putAll
uiRetVal putAll(Writer &, const DataSetKey &)
Definition: hdf5arraynd.h:149
HDF5::Writer
writes to HDF5 file
Definition: hdf5writer.h:43
HDF5::ArrayNDTool::putSlab
uiRetVal putSlab(Writer &, const DataSetKey &, const SlabSpec &)
Definition: hdf5arraynd.h:168
HDF5::Reader
Reads HDF5 file data.
Definition: hdf5reader.h:34
HDF5::Reader::getAll
uiRetVal getAll(const DataSetKey &, void *) const
Get the entire data set in current scope.
HDF5::Writer::putAll
uiRetVal putAll(const DataSetKey &, const void *)
HDF5
Definition: hdf5access.h:22
HDF5::Access::hasDataSet
bool hasDataSet(const DataSetKey &) const
HDF5::Reader::getDataSizes
ArrayNDInfo * getDataSizes(const DataSetKey &, uiRetVal &) const
uiRetVal
Definition: uistringset.h:105
uiRetVal::add
uiRetVal & add(const uiRetVal &)
HDF5::ArrayNDTool::~ArrayNDTool
~ArrayNDTool()
Definition: hdf5arraynd.h:30
HDF5::ArrayNDTool::getWorkArray
T * getWorkArray(uiRetVal &)
Definition: hdf5arraynd.h:69
uiStrings::phrCannotAllocateMemory
static uiString phrCannotAllocateMemory(int64_t reqsz=-1)
arrayndimpl.h
HDF5::ArrayNDTool::getSlab
uiRetVal getSlab(const DataSetKey &, Reader &, const SlabSpec &)
SlabSpec in file goes to (0,0,...) in arr.
Definition: hdf5arraynd.h:106
HDF5::ArrayNDTool::put
uiRetVal put(Writer &, const DataSetKey &)
if necessary, creates dataset
Definition: hdf5arraynd.h:136
HDF5::Reader::getSlab
uiRetVal getSlab(const DataSetKey &, const SlabSpec &, void *) const
HDF5::ArrayNDTool::ArrayNDTool
ArrayNDTool(const ArrayND< T > &arrnd)
Definition: hdf5arraynd.h:26
HDF5::Writer::putSlab
uiRetVal putSlab(const DataSetKey &, const SlabSpec &, const void *)
uistrings.h
uiRetVal::isOK
bool isOK() const
mTryAlloc
#define mTryAlloc(var, stmt)
Catches bad_alloc and sets ptr to null as normal.
Definition: commondefs.h:246
HDF5::ArrayNDTool::workarr_
T * workarr_
Definition: hdf5arraynd.h:48
PtrMan
Definition: ptrman.h:121
HDF5::ArrayNDTool
Definition: hdf5arraynd.h:22
HDF5::Writer::createDataSet
uiRetVal createDataSet(const DataSetKey &, const ArrayNDInfo &, ODDataType)
HDF5::ArrayNDTool::mTypeDefArrNDTypes
mTypeDefArrNDTypes
Definition: hdf5arraynd.h:24
ArrayND
An ArrayND is an array with a given number of dimensions and a size.
Definition: arraynd.h:33
HDF5::ArrayNDTool::createArray
static ArrayND< T > * createArray(const DataSetKey &, Reader &)
Definition: hdf5arraynd.h:56
hdf5writer.h
HDF5::ArrayNDTool::createDataSet
uiRetVal createDataSet(Writer &, const DataSetKey &)
creates appropriate dataset
Definition: hdf5arraynd.h:126
HDF5::DataSetKey
Definition: hdf5access.h:42
HDF5::ArrayNDTool::getAll
uiRetVal getAll(const DataSetKey &, Reader &)
Definition: hdf5arraynd.h:87
HDF5::SlabSpec
Definition: hdf5access.h:109

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