OpendTect  6.6
changetracker.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: A.H. Bril
7  Date: 26/09/2000
8  RCS: $Id$
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "algomod.h"
14 #include "gendefs.h"
15 
25 {
26 public:
27  ChangeTracker( bool* c=0 )
28  : chgd_(c), chgid_(0) {}
29  ChangeTracker( bool& c )
30  : chgd_(&c), chgid_(0) {}
31  ChangeTracker( unsigned int& c )
32  : chgid_(&c), chgd_(0) {}
33  ChangeTracker( unsigned int* c )
34  : chgid_(c), chgd_(0) {}
35  ChangeTracker( bool& c, unsigned int& ci )
36  : chgd_(&c), chgid_(&ci) {}
37 
39  template <class T,class U>
40  inline bool set(const T& oldval,const U& newval);
42  template <class T,class U>
43  inline bool update(T& val,const U& newval);
44 
46  inline bool set(const char*&,const char*&);
47 
48  bool isChanged() const
49  { return chgd_ ? *chgd_ : (bool)(chgid_ ? *chgid_ : 0);}
50  unsigned int changeId() const
51  { return chgid_ ? *chgid_ : (chgd_ ? (*chgd_?1:0) : 0);}
52  inline void setChanged(bool yn=true);
53  void setChangeId( unsigned int c )
54  { if ( chgid_ ) *chgid_ = c; }
55 
56  bool hasBoolVar() const { return chgd_; }
57  bool hasIntVar() const { return chgid_; }
58  const bool& boolVar() const { return *chgd_; }
60  const unsigned int& intVar() const { return *chgid_; }
62 
63  void setVar( bool* m ) { chgd_ = m; }
64  void setVar( bool& m ) { chgd_ = &m; }
65  void setVar( unsigned int* m ) { chgid_ = m; }
66  void setVar( unsigned int& m ) { chgid_ = &m; }
67 
68 protected:
69 
70  bool* chgd_;
71  unsigned int* chgid_;
72 
73 };
74 
75 
87 #define mChgTrackGetSet(chtr,obj,getfn,setfn,newval) { \
88  if ( chtr.set( obj->getfn(), newval ) ) \
89  obj->setfn( newval ); }
90 
91 
92 inline void ChangeTracker::setChanged( bool ischgd )
93 {
94  if ( chgd_ )
95  { if ( !*chgd_ ) *chgd_ = ischgd; }
96  else if ( chgid_ )
97  { if ( ischgd ) (*chgid_)++; }
98 }
99 
100 
101 template <class T,class U>
102 inline bool ChangeTracker::set( const T& val, const U& newval )
103 {
104  bool ret = !(val == mCast(T,newval));
105  setChanged( ret );
106  return ret;
107 }
108 
109 
110 inline bool ChangeTracker::set( const char*& val, const char*& newval )
111 {
112  bool ret = (val && newval) || (!val && !newval);
113  if ( !ret ) { setChanged(true); return true; }
114  if ( !val ) return false;
115 
116  ret = FixedString(val)!=newval;
117  setChanged( ret );
118  return ret;
119 }
120 
121 
122 template <class T,class U>
123 inline bool ChangeTracker::update( T& val, const U& newval )
124 {
125  bool ret = set( val, newval );
126  val = newval;
127  return ret;
128 }
129 
130 
ChangeTracker::setVar
void setVar(unsigned int &m)
Definition: changetracker.h:66
ChangeTracker::setVar
void setVar(unsigned int *m)
Definition: changetracker.h:65
ChangeTracker
Updates a variable when changes occur.
Definition: changetracker.h:25
ChangeTracker::ChangeTracker
ChangeTracker(unsigned int &c)
Definition: changetracker.h:31
ChangeTracker::intVar
const unsigned int & intVar() const
Don't call if !hasIntVar()
Definition: changetracker.h:60
ChangeTracker::chgd_
bool * chgd_
Definition: changetracker.h:70
ChangeTracker::set
bool set(const T &oldval, const U &newval)
returns wether this value is changed
Definition: changetracker.h:102
ChangeTracker::setVar
void setVar(bool &m)
Definition: changetracker.h:64
ChangeTracker::setChangeId
void setChangeId(unsigned int c)
Definition: changetracker.h:53
mClass
#define mClass(module)
Definition: commondefs.h:181
gendefs.h
ChangeTracker::isChanged
bool isChanged() const
Definition: changetracker.h:48
ChangeTracker::hasIntVar
bool hasIntVar() const
Definition: changetracker.h:57
FixedString
OD::String that holds an existing text string.
Definition: fixedstring.h:29
ChangeTracker::ChangeTracker
ChangeTracker(unsigned int *c)
Definition: changetracker.h:33
ChangeTracker::setVar
void setVar(bool *m)
Definition: changetracker.h:63
Conv::set
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
ChangeTracker::chgid_
unsigned int * chgid_
Definition: changetracker.h:71
ChangeTracker::ChangeTracker
ChangeTracker(bool &c)
Definition: changetracker.h:29
ChangeTracker::boolVar
const bool & boolVar() const
Don't call if !hasBoolVar()
Definition: changetracker.h:58
mCast
#define mCast(tp, v)
Definition: commondefs.h:137
ChangeTracker::ChangeTracker
ChangeTracker(bool *c=0)
Definition: changetracker.h:27
ChangeTracker::hasBoolVar
bool hasBoolVar() const
Definition: changetracker.h:56
ChangeTracker::changeId
unsigned int changeId() const
Definition: changetracker.h:50
ChangeTracker::ChangeTracker
ChangeTracker(bool &c, unsigned int &ci)
Definition: changetracker.h:35
ChangeTracker::setChanged
void setChanged(bool yn=true)
Definition: changetracker.h:92
ChangeTracker::update
bool update(T &val, const U &newval)
Changes and returns wether this value is changed.
Definition: changetracker.h:123

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