OpendTect  6.6
Macros
monitor.h File Reference
Include dependency graph for monitor.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define mImplSimpleMonitoredGet_impl(fnnm, typ, memb, ovrspec)   typ fnnm() const ovrspec { return getMemberSimple( memb ); }
 
#define mImplSimpleMonitoredSet_impl(fnnm, typ, memb, chgtyp, ovrspec)
 
#define mImplSimpleMonitoredGet(fnnm, typ, memb)   mImplSimpleMonitoredGet_impl(fnnm,typ,memb,)
 Defines simple MT-safe copyable member get. More...
 
#define mImplSimpleMonitoredGetOverride(fnnm, typ, memb)   mImplSimpleMonitoredGet_impl(fnnm,typ,memb,override)
 
#define mImplSimpleMonitoredSet(fnnm, typ, memb, chgtyp)   mImplSimpleMonitoredSet_impl(fnnm,typ,memb,chgtyp,)
 Defines simple MT-safe copyable member change. More...
 
#define mImplSimpleMonitoredSetOverride(fnnm, typ, memb, chgtyp)   mImplSimpleMonitoredSet_impl(fnnm,typ,memb,chgtyp,override)
 
#define mImplSimpleMonitoredGetSet(pfx, fnnmget, fnnmset, typ, memb, chgtyp)
 Defines simple MT-safe copyable member access. More...
 
#define mLockMonitorable4Read(obj)   MonitoredObject::AccessLocker accesslocker_( obj )
 
#define mLockMonitorable4Write(obj)   MonitoredObject::AccessLocker accesslocker_( obj, false )
 
#define mMonitorableLock2Write(obj)   accesslocker_.convertToWrite()
 
#define mMonitorableReLock(obj)   accesslocker_.reLock()
 
#define mMonitorableUnlockAllAccess(obj)   accesslocker_.unlockNow()
 
#define mMonitorableAccessLocker(obj)   accesslocker_
 
#define mSendMonitorableChgNotif(obj, typ, id)   (obj).sendChgNotif(accesslocker_,typ,id)
 
#define mSendMonitorableEntireObjChgNotif(obj)
 
#define mLock4Read()   mLockMonitorable4Read(*this)
 
#define mLock4Write()   mLockMonitorable4Write(*this)
 
#define mLock2Write()   mMonitorableLock2Write(*this)
 
#define mReLock()   mMonitorableReLock(*this)
 
#define mUnlockAllAccess()   mMonitorableUnlockAllAccess(*this)
 
#define mAccessLocker()   mMonitorableAccessLocker(*this)
 
#define mSendChgNotif(typ, id)   mSendMonitorableChgNotif(*this,typ,id)
 
#define mSendEntireObjChgNotif()   mSendMonitorableEntireObjChgNotif(*this)
 
#define mDeclGenMonitorableAssignment(clss)
 
#define mDeclAbstractMonitorableAssignment(clss)   mDeclGenMonitorableAssignment(clss)
 MonitoredObject subclasses: assignment and comparison. More...
 
#define mDeclMonitorableAssignment(clss)
 like mDeclAbstractMonitorableAssignment but for non-abstract subclasses. Implements the clone() method. More...
 
#define mImplEmptyMonitorableCopyClassData(clssnm)
 
#define mImplAlwaysDifferentMonitorableCompareClassData(clssnm)
 
#define mImplEmptyMonitorableCompare(clssnm)
 
#define mGenImplMonitorableAssignment(pfx, clss, baseclss)
 Implementation of assignment and comparison methods for MonitoredObject's. More...
 
#define mImplMonitorableAssignment(clss, baseclss)   mGenImplMonitorableAssignment(,clss,baseclss)
 
#define mImplMonitorableAssignmentWithNoMembers(clss, baseclss)
 
#define mStartMonitorableCompare()   ChangeType chgtype = cNoChange()
 Helper macro to easily implement your compareClassData() in standard situations. More...
 
#define mHandleMonitorableCompare(memb, val)
 
#define mHandleMonitorableComparePtrContents(memb, val)
 
#define mDeliverMonitorableCompare()   return chgtype;
 
#define mDeliverSingCondMonitorableCompare(nochgcond, chgtype)   return (nochgcond) ? cNoChange() : chgtype
 Helper macro to implement a simple yes/no change compareClassData() More...
 
#define mDeliverYesNoMonitorableCompare(nochgcond)   mDeliverSingCondMonitorableCompare( nochgcond, cEntireObjectChange() )
 Helper macro to implement a simple yes/no change compareClassData() More...
 

Macro Definition Documentation

◆ mAccessLocker

#define mAccessLocker ( )    mMonitorableAccessLocker(*this)

◆ mDeclAbstractMonitorableAssignment

#define mDeclAbstractMonitorableAssignment (   clss)    mDeclGenMonitorableAssignment(clss)

MonitoredObject subclasses: assignment and comparison.

Declares assignment method that will emit notifications, by default 'Entire Object'. Because of the locking, assignment operators are essential. These will need to copy both the 'own' members aswell as base class members, and emit the notification afterwards. For this, you have to implement a function that copies only the class' own data (unlocked): void copyClassData(const clss&).

To be able to provide more fine-grained notifications than always 'Entire Object Changed', you also have to provide a method compareClassData(). in this way we also define the equality operators (== and !=).

The stuff with clone() vs getClone() is because of Windows, and my obsession to make clone() return a pointer to the actual class.

◆ mDeclGenMonitorableAssignment

#define mDeclGenMonitorableAssignment (   clss)
Value:
private: \
void copyClassData(const clss&); \
ChangeType compareClassData(const clss&) const; \
protected: \
void copyAll(const clss&); \
public: \
clss(const clss&); \
clss& operator =(const clss&); \
bool operator ==(const clss&) const; \
inline bool operator !=( const clss& oth ) const \
{ return !(*this == oth); } \
clss* clone() const override { return (clss*)getClone(); } \
ChangeType compareWith(const MonitoredObject&) const override

◆ mDeclMonitorableAssignment

#define mDeclMonitorableAssignment (   clss)
Value:
clss* getClone() const override { return new clss( *this ); }

like mDeclAbstractMonitorableAssignment but for non-abstract subclasses. Implements the clone() method.

◆ mDeliverMonitorableCompare

#define mDeliverMonitorableCompare ( )    return chgtype;

◆ mDeliverSingCondMonitorableCompare

#define mDeliverSingCondMonitorableCompare (   nochgcond,
  chgtype 
)    return (nochgcond) ? cNoChange() : chgtype

Helper macro to implement a simple yes/no change compareClassData()

◆ mDeliverYesNoMonitorableCompare

#define mDeliverYesNoMonitorableCompare (   nochgcond)    mDeliverSingCondMonitorableCompare( nochgcond, cEntireObjectChange() )

Helper macro to implement a simple yes/no change compareClassData()

◆ mGenImplMonitorableAssignment

#define mGenImplMonitorableAssignment (   pfx,
  clss,
  baseclss 
)

Implementation of assignment and comparison methods for MonitoredObject's.

you have to implement the copyClassData and compareClassData functions yourself. These functions are calles in a locked state, so do not use locking member functions.

void MyClass::copyClassData( const MyClass& oth ) { x_ = oth.x_; y_ = oth.y_; } bool MyClass::compareClassData( const MyClass& oth ) const { if ( x_ != oth.x_ ) return cXChanged(); if ( y_ != oth.y_ ) return cYChanged(); return cNoChange(); }

For standard situations, there are macros to help you implement the compareClassData function.

Usually, you can use the mImplMonitorableAssignment macro.

◆ mHandleMonitorableCompare

#define mHandleMonitorableCompare (   memb,
  val 
)
Value:
if ( !(memb == oth.memb) ) \
{ \
if ( chgtype == cNoChange() || chgtype == val ) \
chgtype = val; \
else \
return cEntireObjectChange(); \
}

◆ mHandleMonitorableComparePtrContents

#define mHandleMonitorableComparePtrContents (   memb,
  val 
)
Value:
if ( (memb && !oth.memb) || (!memb && oth.memb) || !(*memb == *oth.memb) ) \
{ \
if ( chgtype == cNoChange() || chgtype == val ) \
chgtype = val; \
else \
return cEntireObjectChange(); \
}

◆ mImplAlwaysDifferentMonitorableCompareClassData

#define mImplAlwaysDifferentMonitorableCompareClassData (   clssnm)
Value:
MonitoredObject::ChangeType clssnm::compareClassData( const clssnm& oth ) const \
{ \
return cEntireObjectChange(); \
}

◆ mImplEmptyMonitorableCompare

#define mImplEmptyMonitorableCompare (   clssnm)
Value:
MonitoredObject::ChangeType clssnm::compareClassData( const clssnm& oth ) const \
{ \
return cNoChange(); \
}

◆ mImplEmptyMonitorableCopyClassData

#define mImplEmptyMonitorableCopyClassData (   clssnm)
Value:
void clssnm::copyClassData( const clssnm& oth ) \
{ \
}

◆ mImplMonitorableAssignment

#define mImplMonitorableAssignment (   clss,
  baseclss 
)    mGenImplMonitorableAssignment(,clss,baseclss)

◆ mImplMonitorableAssignmentWithNoMembers

#define mImplMonitorableAssignmentWithNoMembers (   clss,
  baseclss 
)
Value:
mImplMonitorableAssignment(clss,baseclss) \
mImplEmptyMonitorableCopyClassData( clss ) \
mImplEmptyMonitorableCompare( clss )

◆ mImplSimpleMonitoredGet

#define mImplSimpleMonitoredGet (   fnnm,
  typ,
  memb 
)    mImplSimpleMonitoredGet_impl(fnnm,typ,memb,)

Defines simple MT-safe copyable member get.

◆ mImplSimpleMonitoredGet_impl

#define mImplSimpleMonitoredGet_impl (   fnnm,
  typ,
  memb,
  ovrspec 
)    typ fnnm() const ovrspec { return getMemberSimple( memb ); }

◆ mImplSimpleMonitoredGetOverride

#define mImplSimpleMonitoredGetOverride (   fnnm,
  typ,
  memb 
)    mImplSimpleMonitoredGet_impl(fnnm,typ,memb,override)

◆ mImplSimpleMonitoredGetSet

#define mImplSimpleMonitoredGetSet (   pfx,
  fnnmget,
  fnnmset,
  typ,
  memb,
  chgtyp 
)
Value:
pfx mImplSimpleMonitoredGet(fnnmget,typ,memb) \
pfx mImplSimpleMonitoredSet(fnnmset,const typ&,memb,chgtyp)

Defines simple MT-safe copyable member access.

Example:

mImplSimpleMonitoredGetSet( inline, color, setColor, Color, color_, cColorChange() );

◆ mImplSimpleMonitoredSet

#define mImplSimpleMonitoredSet (   fnnm,
  typ,
  memb,
  chgtyp 
)    mImplSimpleMonitoredSet_impl(fnnm,typ,memb,chgtyp,)

Defines simple MT-safe copyable member change.

◆ mImplSimpleMonitoredSet_impl

#define mImplSimpleMonitoredSet_impl (   fnnm,
  typ,
  memb,
  chgtyp,
  ovrspec 
)
Value:
void fnnm( typ _set_to_ ) ovrspec \
{ setMemberSimple( memb, _set_to_, chgtyp, cUnspecChgID() ); }

◆ mImplSimpleMonitoredSetOverride

#define mImplSimpleMonitoredSetOverride (   fnnm,
  typ,
  memb,
  chgtyp 
)    mImplSimpleMonitoredSet_impl(fnnm,typ,memb,chgtyp,override)

◆ mLock2Write

#define mLock2Write ( )    mMonitorableLock2Write(*this)

◆ mLock4Read

#define mLock4Read ( )    mLockMonitorable4Read(*this)

◆ mLock4Write

#define mLock4Write ( )    mLockMonitorable4Write(*this)

◆ mLockMonitorable4Read

#define mLockMonitorable4Read (   obj)    MonitoredObject::AccessLocker accesslocker_( obj )

◆ mLockMonitorable4Write

#define mLockMonitorable4Write (   obj)    MonitoredObject::AccessLocker accesslocker_( obj, false )

◆ mMonitorableAccessLocker

#define mMonitorableAccessLocker (   obj)    accesslocker_

◆ mMonitorableLock2Write

#define mMonitorableLock2Write (   obj)    accesslocker_.convertToWrite()

◆ mMonitorableReLock

#define mMonitorableReLock (   obj)    accesslocker_.reLock()

◆ mMonitorableUnlockAllAccess

#define mMonitorableUnlockAllAccess (   obj)    accesslocker_.unlockNow()

◆ mReLock

#define mReLock ( )    mMonitorableReLock(*this)

◆ mSendChgNotif

#define mSendChgNotif (   typ,
  id 
)    mSendMonitorableChgNotif(*this,typ,id)

◆ mSendEntireObjChgNotif

#define mSendEntireObjChgNotif ( )    mSendMonitorableEntireObjChgNotif(*this)

◆ mSendMonitorableChgNotif

#define mSendMonitorableChgNotif (   obj,
  typ,
  id 
)    (obj).sendChgNotif(accesslocker_,typ,id)

◆ mSendMonitorableEntireObjChgNotif

#define mSendMonitorableEntireObjChgNotif (   obj)

◆ mStartMonitorableCompare

#define mStartMonitorableCompare ( )    ChangeType chgtype = cNoChange()

Helper macro to easily implement your compareClassData() in standard situations.

The idea is that a single change type can be returned, if more than one change has happened you need to return cEntireObjectChange().

Example:

MonitoredObject::ChangeType Well::Info::compareClassData( const Info& oth ) const { mStartMonitorableCompare(); mHandleMonitorableCompare( uwid_, cUWIDChange() ); mHandleMonitorableCompare( oper_, cInfoChange() ); mHandleMonitorableComparePtrContents( a_ptr_, cDataChange() ); mDeliverMonitorableCompare(); }

◆ mUnlockAllAccess

#define mUnlockAllAccess ( )    mMonitorableUnlockAllAccess(*this)
mDeclGenMonitorableAssignment
#define mDeclGenMonitorableAssignment(clss)
Definition: monitor.h:80
mImplSimpleMonitoredGet
#define mImplSimpleMonitoredGet(fnnm, typ, memb)
Defines simple MT-safe copyable member get.
Definition: monitor.h:28
operator==
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:81
MonitoredObject::ChangeType
int ChangeType
Definition: monitoredobject.h:84
mImplSimpleMonitoredSet
#define mImplSimpleMonitoredSet(fnnm, typ, memb, chgtyp)
Defines simple MT-safe copyable member change.
Definition: monitor.h:34
mImplMonitorableAssignment
#define mImplMonitorableAssignment(clss, baseclss)
Definition: monitor.h:214
operator!=
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:90
MonitoredObject::cEntireObjectChgID
static IDType cEntireObjectChgID()
Definition: monitoredobject.h:111
mSendMonitorableChgNotif
#define mSendMonitorableChgNotif(obj, typ, id)
Definition: monitor.h:62
MonitoredObject
Object that can be MT-safely monitored from cradle to grave.
Definition: monitoredobject.h:77
MonitoredObject::cEntireObjectChange
static ChangeType cEntireObjectChange()
Definition: monitoredobject.h:105

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