OpendTect  6.3
datapack.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: A.H.Bril
8  Date: Jan 2007
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "basicmod.h"
14 #include "sharedobject.h"
15 #include "manobjectset.h"
16 #include "dbkey.h"
17 #include "ptrman.h"
18 #include "od_iosfwd.h"
19 
20 class DataPackMgr;
21 template <class T> class ArrayND;
22 
23 
40 {
41 public:
42 
43  mExpClass(Basic) FullID : public GroupedID
44  {
45  public:
46 
47  typedef GroupID MgrID;
48  typedef ObjID PackID;
49 
50  FullID() {}
51  FullID( MgrID mgrid, PackID packid )
52  : GroupedID(mgrid,packid) {}
53  static FullID getFromString(const char*);
54  static FullID getInvalid();
55  static bool isInDBKey(const DBKey&);
56  static FullID getFromDBKey(const DBKey&);
57  void putInDBKey(DBKey&) const;
58 
59  // aliases
60  MgrID mgrID() const { return groupID(); }
61  PackID packID() const { return objID(); }
62  };
63 
64  typedef FullID::PackID ID;
66 
67  DataPack(const char* categry);
70  //TODO int -> bool
71  int isOK() const { return 1; }
72 
73  ID id() const { return id_; }
74  FullID fullID( MgrID mgrid ) const
75  { return FullID(mgrid,id()); }
76  const char* category() const { return gtCategory(); }
77  float nrKBytes() const { return gtNrKBytes(); }
78  //TODO bool -> void
79  bool dumpInfo( IOPar& iop ) const
80  { doDumpInfo(iop); return true; }
81 
82  static const char* sKeyCategory();
83  static ID cNoID() { return ID(); }
84 
85 
86  mImplSimpleMonitoredGetSet( inline, dbKey, setDBKey, DBKey, dbkey_,
87  cDBKeyChg() )
88  static ChangeType cDBKeyChg() { return 2; }
89 
90  int nrArrays() const { return gtNrArrays(); }
91  const ArrayND<float>* arrayData( int iarr ) const
92  { return gtArrayData(iarr); }
93 
94 protected:
95 
96  virtual ~DataPack();
97 
98  virtual const char* gtCategory() const { return category_; }
99  virtual float gtNrKBytes() const = 0;
100  virtual void doDumpInfo(IOPar&) const;
101  virtual int gtNrArrays() const { return 0; }
102  virtual const ArrayND<float>* gtArrayData(int) const { return 0; }
103 
104  void setManager(const DataPackMgr*);
105  const ID id_;
108 
110 
111  static ID getNewID();
112  static float sKb2MbFac();
113 
114  void setCategory( const char* c )
115  { *const_cast<BufferString*>(&category_) = c; }
116 
117  friend class DataPackMgr;
118 
119 public:
120 
121  mDeprecated void release();
123 
124 };
125 
126 
130 {
131 public:
132 
133  BufferDataPack(char* b=0,od_int64 s=0,
134  const char* catgry="Buffer");
136 
137  char* buf() { return buf_; }
138  char const* buf() const { return buf_; }
139  od_int64 size() const { return sz_; }
140  void setBuf(char*,od_int64);
141  bool mkNewBuf(od_int64);
142 
143  static char* createBuf(od_int64);
144 
145 protected:
146 
147  ~BufferDataPack();
148 
149  char* buf_;
151 
152  virtual float gtNrKBytes() const { return sz_*sKb2MbFac(); }
153 
154 };
155 
156 
175 {
176 public:
177  // You can, but normally should not, construct
178  // a manager. In general, leave it to DPM() - see below.
179 
181  inline static ID getID( const DataPack::FullID& fid )
182  { return fid.groupID(); }
183 
184  bool haveID(DataPack::ID) const;
185  inline bool haveID( const DataPack::FullID& fid ) const
186  { return id() == fid.groupID()
187  && haveID( fid.objID() ); }
188 
189  template <class T>
190  inline T* add(T* p) { doAdd(p); return p; }
191  template <class T>
192  inline T* add(RefMan<T>& p) { doAdd(p.ptr()); return p; }
193  RefMan<DataPack> get(DataPack::ID) const;
194 
195  template <class T>
196  inline RefMan<T> getAndCast(DataPack::ID) const;
198 
200 
201  template <class T>
202  inline WeakPtr<T> observeAndCast(DataPack::ID) const;
204 
205  bool ref(DataPack::ID dpid);
206  //Convenience. Will ref if it is found
207  bool unRef(DataPack::ID dpid);
208  //Convenience. Will ref if it is found
209 
212 
213  // Standard mgr IDs take the low integer numbers
214  static ID BufID();
215  static ID PointID();
216  static ID SeisID();
217  static ID FlatID();
218  static ID SurfID();
219 
220  // Convenience to get info without any obtain()
221  const char* nameOf(DataPack::ID) const;
222  static const char* nameOf(const DataPack::FullID&);
223  const char* categoryOf(DataPack::ID) const;
224  static const char* categoryOf(const DataPack::FullID&);
225  virtual float nrKBytesOf(DataPack::ID) const;
226  virtual void dumpInfoFor(DataPack::ID,IOPar&) const;
227 
228  ID id() const { return id_; }
229  void dumpInfo(od_ostream&) const;
230  float nrKBytes() const;
231 
232  void getPackIDs(TypeSet<DataPack::ID>&) const;
233 
234 protected:
235 
236  void doAdd(DataPack*);
237 
238  ID id_;
239  mutable WeakPtrSet<DataPack> packs_;
240 
243 
244 public:
245 
246  DataPackMgr(ID);
249  ~DataPackMgr();
252 
253  static DataPackMgr& DPM(ID);
254  static DataPackMgr* gtDPM(ID,bool);
255  static void dumpDPMs(od_ostream&);
256 
263  mDeprecated const DataPack* obtain( DataPack::ID dpid ) const;
265  mDeprecated void release( const DataPack* dp )
266  { if ( dp ) unRef( dp->id() ); }
267  mDeprecated void releaseAll(bool donotify);
268 };
269 
270 
271 
272 template <class T>
274 {
275 public:
276  mDeprecated ConstDataPackRef(const DataPack* p);
278  mDeprecated ConstDataPackRef(const ConstDataPackRef<T>&);
279  virtual ~ConstDataPackRef() { releaseNow();}
280 
281  ConstDataPackRef<T>& operator=(const ConstDataPackRef<T>&);
282 
283  void releaseNow();
284 
285  operator bool() const { return ptr_; }
286  const T* operator->() const { return ptr_; }
287  const T& operator*() const { return *ptr_;}
288  const T* ptr() const { return ptr_; }
289  const DataPack* dataPack() const { return dp_; }
290 
291 protected:
292 
294  T* ptr_;
295 };
296 
331 template <class T>
333 {
334 public:
337  mDeprecated DataPackRef(const DataPackRef<T>&);
338 
339  DataPackRef<T>& operator=(const DataPackRef<T>&);
340 
341  void releaseNow();
342 
343  T* operator->() { return this->ptr_; }
344  T& operator*() { return *this->ptr_;}
345  T* ptr() { return this->ptr_; }
346  DataPack* dataPack() { return this->dp_; }
347 };
348 
349 
352 mGlobal(Basic) DataPackMgr& DPM(const DataPack::FullID&);
354 
355 #define mObtainDataPack( var, type, mgrid, newid ) \
356 { \
357  unRefAndZeroPtr( var ); \
358  \
359  RefMan<DataPack> __dp = DPM( mgrid ).get( newid ); \
360  mDynamicCastGet( type, __dummy, __dp.ptr() ); \
361  var = (type) refPtr( __dummy ); \
362 }
363 
364 
365 #define mObtainDataPackToLocalVar( var, type, mgrid, newid ) \
366 type var = 0; \
367 mObtainDataPack( var, type, mgrid, newid ); \
368 
369 //Implementations
370 
371 template <class T> inline
373 {
374  RefMan<DataPack> pack = get( dpid );
375  mDynamicCastGet( T*, casted, pack.ptr() );
376  return RefMan<T>( casted );
377 }
378 
379 
380 template <class T> inline
382 {
383  RefMan<DataPack> pack = get( dpid );
384  pack.setNoDelete( true );
385 
386  mDynamicCastGet( T*, casted, pack.ptr() );
387  return WeakPtr<T>( casted );
388 }
389 
390 
391 template <class T> inline
393  : dp_(const_cast<DataPack*>(dp) )
394  , ptr_( 0 )
395 {
396  mDynamicCast(T*, ptr_, dp_ );
397 }
398 
399 
400 template <class T> inline
402  : ptr_( dpr.ptr_ )
403  , dp_( dpr.dp_ )
404 {
405  if ( dp_ ) dp_->ref();
406 }
407 
408 
409 template <class T> inline
412 {
413  releaseNow();
414  ptr_ = dpr.ptr_;
415  dp_ = dpr.dp_;
416 
417  if ( dp_ ) dp_->ref();
418  return *this;
419 }
420 
421 
422 template <class T> inline
424 {
425  ptr_ = 0;
426  if ( dp_ )
427  {
428  dp_->unRef();
429  dp_ = 0;
430  }
431 }
432 
433 
434 template <class T> inline
436  : ConstDataPackRef<T>( p )
437 { }
438 
439 
440 template <class T> inline
442  : ConstDataPackRef<T>( dpr )
443 { }
444 
445 
446 template <class T> inline
448 {
450  return *this;
451 }
#define mExpClass(module)
Definition: commondefs.h:157
bool getFromString(int &, const char *, int udfval)
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
char * buf()
Definition: datapack.h:137
T * add(RefMan< T > &p)
Definition: datapack.h:192
OD class for stream write common access to the user log file, or std::cout in batch progs...
Definition: od_ostream.h:25
void release(DataPack::ID)
bool haveID(const DataPack::FullID &fid) const
Definition: datapack.h:185
int ChangeType
Definition: monitorable.h:80
int64_t size() const
Definition: datapack.h:139
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
int isOK() const
Definition: datapack.h:71
Definition: datapack.h:43
char const * buf() const
Definition: datapack.h:138
const char * category() const
Definition: datapack.h:76
static ID cNoID()
Definition: datapack.h:83
virtual int gtNrArrays() const
Definition: datapack.h:101
bool dumpInfo(IOPar &iop) const
Definition: datapack.h:79
static void dumpDPMs(od_ostream &)
Simple DataPack based on an unstructured char array buffer.
Definition: datapack.h:129
static ID PointID()
Sets of &#39;unconnected&#39; points: 2.
void setNoDelete(bool yn)
Definition: ptrman.h:489
bool haveID(DataPack::ID) const
#define mGlobal(module)
Definition: commondefs.h:160
virtual const ArrayND< float > * gtArrayData(int) const
Definition: datapack.h:102
virtual ~ConstDataPackRef()
Definition: datapack.h:279
#define od_int64
Definition: plftypes.h:34
Definition: sharedobject.h:18
GroupID groupID() const
Definition: groupedid.h:52
virtual const char * gtCategory() const
Definition: datapack.h:98
T & operator*()
Definition: datapack.h:344
DataPackRef< T > & operator=(const DataPackRef< T > &)
Definition: datapack.h:447
ID id() const
Definition: datapack.h:228
Notifier< DataPackMgr > packToBeRemoved
Passed CallBacker* = Pack.
Definition: datapack.h:211
DataPack * dataPack()
Definition: datapack.h:346
const T * operator->() const
Definition: datapack.h:286
ConstDataPackRef(const DataPack *p)
Assumes p is obtained.
Definition: datapack.h:392
virtual float nrKBytesOf(DataPack::ID) const
static DataPackMgr * gtDPM(ID, bool)
const DataPackMgr * manager_
Definition: datapack.h:109
void getPackIDs(TypeSet< DataPack::ID > &) const
int nrArrays() const
Definition: datapack.h:90
RefMan< T > getAndCast(DataPack::ID) const
Dynamic casts to T and returns results.
Definition: datapack.h:372
#define mDeclMonitorableAssignment(clss)
like mDeclAbstractMonitorableAssignment but for non-abstract subclasses. Implements the clone() metho...
Definition: monitor.h:111
void release(const DataPack *dp)
Definition: datapack.h:265
static ID FlatID()
Flat (N1xN2) data: 4.
Definition: datapack.h:273
A data packet: data+positioning and more that needs to be shared.
Definition: datapack.h:39
#define mDeclInstanceCreatedNotifierAccess(clss)
Definition: notify.h:235
FullID::PackID ID
Definition: datapack.h:64
Definition: groupedid.h:40
Manages DataPacks.
Definition: datapack.h:174
static ID getID(const DataPack::FullID &fid)
Definition: datapack.h:181
static ID BufID()
Simple data buffer: 1.
FullID(MgrID mgrid, PackID packid)
Definition: datapack.h:51
T * operator->()
Definition: datapack.h:343
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
ID id() const
Definition: datapack.h:73
#define mImplSimpleMonitoredGetSet(pfx, fnnmget, fnnmset, typ, memb, chgtyp)
Defines simple MT-safe copyable member access.
Definition: monitor.h:39
ID id_
Definition: datapack.h:238
static Threads::Lock mgrlistlock_
Definition: datapack.h:241
DataPackRef(DataPack *p)
Assumes p is obtained.
Definition: datapack.h:435
int64_t sz_
Definition: datapack.h:150
const T & operator*() const
Definition: datapack.h:287
bool unRef(DataPack::ID dpid)
void doAdd(DataPack *)
DataPack::FullID::MgrID ID
Definition: datapack.h:180
T * add(T *p)
Definition: datapack.h:190
char * buf_
Definition: datapack.h:149
FullID fullID(MgrID mgrid) const
Definition: datapack.h:74
DataPack * addAndObtain(DataPack *)
#define mDynamicCastGet(typ, out, in)
Definition: commondefs.h:123
T * ptr_
Definition: datapack.h:294
const DataPack * dataPack() const
Definition: datapack.h:289
DBKey dbkey_
Definition: datapack.h:107
const ArrayND< float > * arrayData(int iarr) const
Definition: datapack.h:91
An ArrayND is an array with a given number of dimensions and a size.
Definition: arraynd.h:29
#define mDynamicCast(typ, out, in)
Definition: commondefs.h:122
WeakPtr< T > observeAndCast(DataPack::ID) const
Dynamic casts to T and returns results.
Definition: datapack.h:381
Definition: datapack.h:332
const char * categoryOf(DataPack::ID) const
#define mDeprecated
Definition: plfdefs.h:213
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
DataPack * dp_
Definition: datapack.h:293
float nrKBytes() const
Notifier< DataPackMgr > newPack
Passed CallBacker* = Pack.
Definition: datapack.h:210
PackID packID() const
Definition: datapack.h:61
DataPack * obtain(DataPack::ID dpid)
ObjID objID() const
Definition: groupedid.h:54
const ID id_
Definition: datapack.h:105
FullID()
Definition: datapack.h:50
T * ptr()
Definition: datapack.h:345
ObjID PackID
Definition: datapack.h:48
ConstDataPackRef< T > & operator=(const ConstDataPackRef< T > &)
Definition: datapack.h:411
DataPackMgr & DPM(DataPackMgr::ID)
will create a new mgr if needed
Definition: ptrman.h:22
FixedString SeisID()
Definition: keystrs.h:110
virtual void dumpInfoFor(DataPack::ID, IOPar &) const
void releaseAll(bool donotify)
Full key to any object in the OpendTect data store.
Definition: dbkey.h:36
void setCategory(const char *c)
Definition: datapack.h:114
Definition: groupedid.h:41
const T * ptr() const
Definition: datapack.h:288
WeakPtr< DataPack > observe(DataPack::ID) const
MgrID mgrID() const
Definition: datapack.h:60
WeakPtrSet< DataPack > packs_
Definition: datapack.h:239
#define mClass(module)
Definition: commondefs.h:161
const char * nameOf(ButtonState)
FixedString ID()
Definition: keystrs.h:71
virtual float gtNrKBytes() const
Definition: datapack.h:152
A unique identifier for an object consisting of a group and an ID within the group.
Definition: groupedid.h:34
#define mDeclAbstractMonitorableAssignment(clss)
Monitorable subclasses: assignment and comparison.
Definition: monitor.h:105
FullID::MgrID MgrID
Definition: datapack.h:65
void releaseNow()
Definition: datapack.h:423
bool ref(DataPack::ID dpid)
static ManagedObjectSet< DataPackMgr > mgrs_
Definition: datapack.h:242
float nrKBytes() const
Definition: datapack.h:77
void dumpInfo(od_ostream &) const
const T * ptr() const
Definition: ptrman.h:95
Definition: ptrman.h:200
const BufferString category_
Definition: datapack.h:106
GroupID MgrID
Definition: datapack.h:47
static ID SurfID()
Surface (triangulated) data: 5.

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