OpendTect  6.6
stratunitref.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
8  Date: Dec 2003 / Sep 2010
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 
13 -*/
14 
15 #include "stratmod.h"
16 #include "compoundkey.h"
17 #include "stratlevel.h"
18 #include "enums.h"
19 #include "iopar.h"
20 
21 
22 namespace Strat
23 {
24 
25 class RefTree;
26 class Lithology;
27 class NodeUnitRef;
28 class LeafUnitRef;
29 
38 {
39 public:
40 
41  enum Type { NodeOnly, Leaved, Leaf };
43 
44  UnitRef(NodeUnitRef*,const char* d=0);
45  virtual ~UnitRef();
46 
47  virtual Type type() const = 0;
48  virtual bool isEmpty() const { return false; }
49  virtual bool isUndef() const { return false; }
50  virtual bool hasChildren() const = 0;
51  bool isLeaf() const { return type()==Leaf; }
52  bool isLeaved() const { return type()==Leaved; }
55 
56  virtual const OD::String& code() const = 0;
57  virtual void setCode(const char*) {}
58  const OD::String& description() const { return desc_; }
59  virtual void setDescription( const char* d ) { desc_ = d; }
60  Color color() const { return color_; }
61  void setColor(Color);
62  IOPar& pars() { return pars_; }
63  const IOPar& pars() const { return pars_; }
64 
65  NodeUnitRef* upNode(int skip=0);
66  const NodeUnitRef* upNode( int skip=0 ) const
67  { return ((UnitRef*)this)->upNode( skip ); }
68  void setUpNode(NodeUnitRef* newpar)
69  { upnode_ = newpar; }
70  NodeUnitRef* topNode();
71  const NodeUnitRef* topNode() const;
72  RefTree& refTree(); // is the topNode
73  const RefTree& refTree() const;
74  virtual bool isParentOf(const UnitRef&) const { return false; }
75  virtual int level() const = 0;
76 
79 
80  virtual const LeafUnitRef* firstLeaf() const = 0;
81 
82 protected:
83 
85 
89 
90  void doFill(BufferString&,int) const;
91  void doUse(const char*,int*);
92  void notifChange(bool isrem=false);
93 
94  friend class NodeUnitRef;
95 
96 public:
97 
98  int treeDepth() const;
99  bool isBelow(const UnitRef*) const;
101  bool precedes(const UnitRef&) const;
103 
104  virtual void fill( BufferString& bs ) const { doFill(bs,mUdf(int));}
105  virtual void use( const char* s ) { doUse(s,0); }
106  virtual void getPropsFrom(const IOPar&);
107  virtual void putPropsTo(IOPar&) const;
108 
109  static const char* sKeyPropsFor() { return "Properties for "; }
110  static const char* sKeyTreeProps() { return "entire tree"; }
111 
112 };
113 
114 
118 {
119 public:
120 
121  NodeUnitRef(NodeUnitRef*,const char*,const char* d=0);
123  void setEmpty();
124 
125  virtual bool isEmpty() const { return refs_.isEmpty(); }
126  virtual bool hasChildren() const { return !refs_.isEmpty(); }
127  virtual bool hasLeaves() const = 0;
128 
129  virtual const OD::String& code() const { return code_; }
130  virtual void setCode( const char* c ) { code_ = c; }
131 
132  virtual Interval<float> timeRange() const { return timerg_; }
133  virtual void setTimeRange(const Interval<float>&);
135 
136  int nrRefs() const { return refs_.size(); }
137  UnitRef& ref( int idx ) { return *refs_[idx]; }
138  const UnitRef& ref( int idx ) const { return *refs_[idx]; }
139  int indexOf( const UnitRef* ur ) const
140  { return refs_.indexOf((const NodeUnitRef*)ur); }
141  virtual bool isParentOf(const UnitRef&) const;
142 
143  UnitRef* find( const char* urcode ) { return fnd(urcode); }
144  const UnitRef* find( const char* urcode ) const{ return fnd(urcode); }
145 
146  virtual int nrLeaves() const;
147  virtual int level() const { return upnode_?upnode_->level()+1:0; }
148 
149 protected:
150 
154 
155  UnitRef* fnd(const char*) const;
157  friend class RefTree;
158 
159 public:
160 
161  virtual bool add(UnitRef*,bool rev=false);
162  virtual bool insert(UnitRef*,int posidx);
163  virtual UnitRef* replace(int uridx,UnitRef*);
164  void swapChildren(int,int);
165  void remove( int uridx )
166  { delete refs_.removeSingle(uridx); }
167  void remove( const UnitRef* ur )
168  { remove( indexOf( ur ) ); }
170  { deepErase( refs_ ); }
171 
172  virtual void getPropsFrom(const IOPar&);
173  virtual void putPropsTo(IOPar&) const;
174 protected:
175  void changeTimeRange(float dtime);
176 
177 };
178 
179 
183 {
184 public:
185  NodeOnlyUnitRef( NodeUnitRef* up, const char* c,
186  const char* d=0 )
187  : NodeUnitRef(up,c,d) {}
188 
189  virtual bool hasLeaves() const { return false; }
190  virtual Type type() const { return NodeOnly; }
191  virtual const LeafUnitRef* firstLeaf() const;
192 
193 };
194 
195 
199 {
200 public:
201  LeavedUnitRef( NodeUnitRef* up, const char* c,
202  const char* d=0 )
203  : NodeUnitRef(up,c,d)
204  , levelid_(-1) {}
205 
206  virtual Type type() const { return Leaved; }
207  virtual bool hasLeaves() const { return true; }
208 
209  Level::ID levelID() const { return levelid_; }
211 
212  virtual int nrLeaves() const { return refs_.size(); }
213  virtual const LeafUnitRef* firstLeaf() const
214  { return refs_.isEmpty() ? 0 : refs_[0]->firstLeaf(); }
215 
217  const LeafUnitRef* getLeaf( int i ) const
218  { return const_cast<LeavedUnitRef*>(this)->getLeaf(i); }
220  const LeafUnitRef* getLeaf( const Lithology& l ) const
221  { return const_cast<LeavedUnitRef*>(this)->getLeaf(l); }
222 
223 protected:
224 
226 
227  virtual void fill( BufferString& bs ) const { doFill(bs,levelid_); }
228  virtual void use( const char* s ) { doUse(s,&levelid_); }
229 
230 };
231 
232 
236 {
237 public:
238 
239  LeafUnitRef(NodeUnitRef*,int lithid=-1,
240  const char* desc=0);
241  virtual bool isUndef() const;
242 
243  virtual Type type() const { return Leaf; }
244  virtual bool hasChildren() const { return false; }
245  virtual const OD::String& code() const;
246  int lithology() const { return lith_; }
247  void setLithology(int);
248 
249  const Lithology& getLithology() const;
250  Color dispColor(bool lith_else_upnode) const;
251  virtual int level() const { return upnode_?upnode_->level()+1:0; }
252  virtual const LeafUnitRef* firstLeaf() const { return this; }
253 
254 protected:
255 
256  int lith_; // Lithology::ID
257 
258  virtual void fill( BufferString& bs ) const { doFill(bs,lith_); }
259  virtual void use( const char* s ) { doUse(s,&lith_); }
260 
261 
262 public:
263 
264  virtual void getPropsFrom(const IOPar&);
265 
266 };
267 
268 
270 { return upnode_ ? upnode_->topNode() : (NodeUnitRef*)this; }
271 inline const NodeUnitRef* UnitRef::topNode() const
272 { return upnode_ ? upnode_->topNode() : (NodeUnitRef*)this; }
273 
274 
275 }; // namespace Strat
276 
Strat::NodeUnitRef::ref
UnitRef & ref(int idx)
Definition: stratunitref.h:137
Strat::UnitRef::upnode_
NodeUnitRef * upnode_
Definition: stratunitref.h:84
Strat::NodeUnitRef::find
UnitRef * find(const char *urcode)
Definition: stratunitref.h:143
Strat::UnitRef::isLeaf
bool isLeaf() const
Definition: stratunitref.h:51
Strat::UnitRef::refTree
const RefTree & refTree() const
Strat::UnitRef::setDescription
virtual void setDescription(const char *d)
Definition: stratunitref.h:59
Strat::LeavedUnitRef::fill
virtual void fill(BufferString &bs) const
Definition: stratunitref.h:227
Strat::LeafUnitRef::level
virtual int level() const
Definition: stratunitref.h:251
Strat::LeafUnitRef::fill
virtual void fill(BufferString &bs) const
Definition: stratunitref.h:258
Strat::NodeUnitRef::indexOf
int indexOf(const UnitRef *ur) const
Definition: stratunitref.h:139
Strat::LeafUnitRef::code
virtual const OD::String & code() const
Strat::UnitRef::desc_
BufferString desc_
Definition: stratunitref.h:86
Strat::NodeUnitRef::isParentOf
virtual bool isParentOf(const UnitRef &) const
Strat::LeafUnitRef::isUndef
virtual bool isUndef() const
Strat::LeavedUnitRef::getLeaf
const LeafUnitRef * getLeaf(int i) const
Definition: stratunitref.h:217
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
Strat::UnitRef::sKeyTreeProps
static const char * sKeyTreeProps()
Definition: stratunitref.h:110
Strat::NodeUnitRef::remove
void remove(const UnitRef *ur)
Definition: stratunitref.h:167
Strat::UnitRef::code
virtual const OD::String & code() const =0
Strat::NodeUnitRef
UnitRef for units containing other units only.
Definition: stratunitref.h:118
Strat::UnitRef::notifChange
void notifChange(bool isrem=false)
ObjectSet::removeSingle
virtual T * removeSingle(idx_type, bool keep_order=true)
Definition: objectset.h:547
Strat::UnitRef::topNode
NodeUnitRef * topNode()
Definition: stratunitref.h:269
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Strat::LeavedUnitRef::LeavedUnitRef
LeavedUnitRef(NodeUnitRef *up, const char *c, const char *d=0)
Definition: stratunitref.h:201
Strat::LeavedUnitRef
UnitRef for units containing Leaf units only.
Definition: stratunitref.h:199
Strat::NodeUnitRef::code
virtual const OD::String & code() const
Definition: stratunitref.h:129
Strat::NodeUnitRef::hasLeaves
virtual bool hasLeaves() const =0
stratlevel.h
Strat::UnitRef::color_
Color color_
Definition: stratunitref.h:87
Strat::NodeUnitRef::fnd
UnitRef * fnd(const char *) const
Strat::NodeUnitRef::hasChildren
virtual bool hasChildren() const
Definition: stratunitref.h:126
Strat::UnitRef::doFill
void doFill(BufferString &, int) const
Strat::NodeUnitRef::~NodeUnitRef
~NodeUnitRef()
Strat::NodeUnitRef::refs_
ObjectSet< UnitRef > refs_
Definition: stratunitref.h:151
Strat::UnitRef::fullCode
CompoundKey fullCode() const
Strat::NodeUnitRef::isEmpty
virtual bool isEmpty() const
Definition: stratunitref.h:125
Strat::UnitRef::getPropsFrom
virtual void getPropsFrom(const IOPar &)
CallBacker
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:185
Strat::LeavedUnitRef::getLeaf
LeafUnitRef * getLeaf(const Lithology &)
Strat::LeafUnitRef::hasChildren
virtual bool hasChildren() const
Definition: stratunitref.h:244
Strat::RefTree
Tree of UnitRef's
Definition: stratreftree.h:29
Strat::NodeUnitRef::changeTimeRange
void changeTimeRange(float dtime)
Strat::UnitRef::refTree
RefTree & refTree()
Strat::LeafUnitRef::type
virtual Type type() const
Definition: stratunitref.h:243
Strat::UnitRef::fill
virtual void fill(BufferString &bs) const
Definition: stratunitref.h:104
Strat::LeafUnitRef::lithology
int lithology() const
Definition: stratunitref.h:246
Strat::LeavedUnitRef::getLeaf
LeafUnitRef * getLeaf(int)
isEmpty
bool isEmpty(const NLAModel *mdl)
Strat::UnitRef::mDeclareEnumUtils
mDeclareEnumUtils(Type) UnitRef(NodeUnitRef *
Strat::UnitRef::isLeaved
bool isLeaved() const
Definition: stratunitref.h:52
Strat::NodeUnitRef::nrRefs
int nrRefs() const
Definition: stratunitref.h:136
Strat::NodeUnitRef::swapChildren
void swapChildren(int, int)
Strat::UnitRef::sKeyPropsFor
static const char * sKeyPropsFor()
Definition: stratunitref.h:109
Strat::LeafUnitRef::setLithology
void setLithology(int)
Strat::Lithology
a name and an ID.
Definition: stratlith.h:37
Strat::NodeUnitRef::find
const UnitRef * find(const char *urcode) const
Definition: stratunitref.h:144
Strat::UnitRef::isParentOf
virtual bool isParentOf(const UnitRef &) const
Definition: stratunitref.h:74
Strat::NodeOnlyUnitRef::firstLeaf
virtual const LeafUnitRef * firstLeaf() const
Strat::UnitRef::level
virtual int level() const =0
Strat::UnitRef::putPropsTo
virtual void putPropsTo(IOPar &) const
Strat::NodeUnitRef::incTimeRange
void incTimeRange(const Interval< float > &)
File::remove
bool remove(const char *)
indexOf
BufferStringSet::idx_type indexOf(const BufferStringSet &, const char *)
Strat::NodeUnitRef::NodeUnitRef
NodeUnitRef(NodeUnitRef *, const char *, const char *d=0)
Strat::NodeUnitRef::setTimeRange
virtual void setTimeRange(const Interval< float > &)
Strat::LeafUnitRef::firstLeaf
virtual const LeafUnitRef * firstLeaf() const
Definition: stratunitref.h:252
Strat::UnitRef::doUse
void doUse(const char *, int *)
Strat::NodeOnlyUnitRef::NodeOnlyUnitRef
NodeOnlyUnitRef(NodeUnitRef *up, const char *c, const char *d=0)
Definition: stratunitref.h:185
Strat::LeavedUnitRef::nrLeaves
virtual int nrLeaves() const
Definition: stratunitref.h:212
Strat::LeafUnitRef::getLithology
const Lithology & getLithology() const
Strat::UnitRef::setUpNode
void setUpNode(NodeUnitRef *newpar)
Definition: stratunitref.h:68
Strat::UnitRef::setCode
virtual void setCode(const char *)
Definition: stratunitref.h:57
Notifier
Class to help setup a callback handling.
Definition: notify.h:126
Strat::UnitRef::isUndef
virtual bool isUndef() const
Definition: stratunitref.h:49
Strat::UnitRef::Type
Type
Definition: stratunitref.h:41
Strat::LeafUnitRef::lith_
int lith_
Definition: stratunitref.h:256
compoundkey.h
Strat::NodeUnitRef::takeChildrenFrom
void takeChildrenFrom(NodeUnitRef *)
Strat::NodeUnitRef::removeAllChildren
void removeAllChildren()
Definition: stratunitref.h:169
Strat::NodeUnitRef::ref
const UnitRef & ref(int idx) const
Definition: stratunitref.h:138
Strat::UnitRef::changed
Notifier< UnitRef > changed
Definition: stratunitref.h:77
Strat::LeavedUnitRef::setLevelID
void setLevelID(Level::ID)
Strat::UnitRef::pars
const IOPar & pars() const
Definition: stratunitref.h:63
Strat::UnitRef::treeDepth
int treeDepth() const
Strat::LeavedUnitRef::type
virtual Type type() const
Definition: stratunitref.h:206
Strat::NodeUnitRef::insert
virtual bool insert(UnitRef *, int posidx)
Strat::LeafUnitRef::use
virtual void use(const char *s)
Definition: stratunitref.h:259
Strat::LeafUnitRef::LeafUnitRef
LeafUnitRef(NodeUnitRef *, int lithid=-1, const char *desc=0)
Strat::UnitRef::upNode
NodeUnitRef * upNode(int skip=0)
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
Strat::NodeUnitRef::setEmpty
void setEmpty()
deepErase
void deepErase(BufferStringSet &)
Strat::LeafUnitRef
UnitRef for layers.
Definition: stratunitref.h:236
Strat::NodeOnlyUnitRef
UnitRef for units containing non-Leaf units only.
Definition: stratunitref.h:183
Strat::NodeUnitRef::add
virtual bool add(UnitRef *, bool rev=false)
Strat
Stratigraphy.
Definition: stratlevel.h:26
Strat::UnitRef::toBeDeleted
Notifier< UnitRef > toBeDeleted
Definition: stratunitref.h:78
Strat::NodeOnlyUnitRef::type
virtual Type type() const
Definition: stratunitref.h:190
OD::String
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:31
Strat::NodeOnlyUnitRef::hasLeaves
virtual bool hasLeaves() const
Definition: stratunitref.h:189
enums.h
Strat::NodeUnitRef::code_
BufferString code_
Definition: stratunitref.h:153
Strat::UnitRef::setColor
void setColor(Color)
Strat::UnitRef::parentCode
CompoundKey parentCode() const
Strat::NodeUnitRef::timeRange
virtual Interval< float > timeRange() const
Definition: stratunitref.h:132
Strat::NodeUnitRef::remove
void remove(int uridx)
Definition: stratunitref.h:165
Strat::LeafUnitRef::dispColor
Color dispColor(bool lith_else_upnode) const
mUdf
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
Strat::LeafUnitRef::getPropsFrom
virtual void getPropsFrom(const IOPar &)
Strat::LeavedUnitRef::hasLeaves
virtual bool hasLeaves() const
Definition: stratunitref.h:207
Strat::LeavedUnitRef::levelid_
Level::ID levelid_
Definition: stratunitref.h:225
Strat::UnitRef::pars_
IOPar pars_
Definition: stratunitref.h:88
iopar.h
CompoundKey
Concatenated short keys separated by dots. Used for Object identifiers in the Object Manager,...
Definition: compoundkey.h:23
Strat::NodeUnitRef::putPropsTo
virtual void putPropsTo(IOPar &) const
Strat::LeavedUnitRef::getLeaf
const LeafUnitRef * getLeaf(const Lithology &l) const
Definition: stratunitref.h:220
Strat::UnitRef::upNode
const NodeUnitRef * upNode(int skip=0) const
Definition: stratunitref.h:66
Strat::UnitRef::color
Color color() const
Definition: stratunitref.h:60
Strat::NodeUnitRef::getPropsFrom
virtual void getPropsFrom(const IOPar &)
Strat::UnitRef::use
virtual void use(const char *s)
Definition: stratunitref.h:105
Strat::UnitRef::hasChildren
virtual bool hasChildren() const =0
Strat::LeavedUnitRef::use
virtual void use(const char *s)
Definition: stratunitref.h:228
Strat::UnitRef::description
const OD::String & description() const
Definition: stratunitref.h:58
Interval< float >
Strat::UnitRef::isBelow
bool isBelow(const UnitRef *) const
is given ref parent, grandparent, grandgrand...
Strat::UnitRef::isEmpty
virtual bool isEmpty() const
Definition: stratunitref.h:48
Strat::Level::ID
int ID
Definition: stratlevel.h:45
Color
Color is an RGB color object, with a transparancy. The storage is in a 4-byte integer,...
Definition: color.h:26
Strat::LeavedUnitRef::levelID
Level::ID levelID() const
Definition: stratunitref.h:209
Strat::NodeUnitRef::level
virtual int level() const
Definition: stratunitref.h:147
Strat::LeavedUnitRef::firstLeaf
virtual const LeafUnitRef * firstLeaf() const
Definition: stratunitref.h:213
Strat::UnitRef::precedes
bool precedes(const UnitRef &) const
in terms of iterating through tree
Strat::NodeUnitRef::replace
virtual UnitRef * replace(int uridx, UnitRef *)
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
Strat::UnitRef
Reference data for a stratigraphic unit.
Definition: stratunitref.h:38
Strat::UnitRef::firstLeaf
virtual const LeafUnitRef * firstLeaf() const =0
Strat::NodeUnitRef::nrLeaves
virtual int nrLeaves() const
Strat::NodeUnitRef::timerg_
Interval< float > timerg_
Definition: stratunitref.h:152
Strat::NodeUnitRef::setCode
virtual void setCode(const char *c)
Definition: stratunitref.h:130
Strat::UnitRef::pars
IOPar & pars()
Definition: stratunitref.h:62

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