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

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