21 #define mImplSimpleMonitoredGet(fnnm,typ,memb) \ 22 typ fnnm() const { return getMemberSimple( memb ); } 26 #define mImplSimpleMonitoredSet(fnnm,typ,memb,chgtyp) \ 27 void fnnm( typ _set_to_ ) { setMemberSimple( memb, _set_to_, chgtyp, \ 39 #define mImplSimpleMonitoredGetSet(pfx,fnnmget,fnnmset,typ,memb,chgtyp) \ 40 pfx mImplSimpleMonitoredGet(fnnmget,typ,memb) \ 41 pfx mImplSimpleMonitoredSet(fnnmset,const typ&,memb,chgtyp) 45 #define mLockMonitorable4Read(obj) \ 46 Monitorable::AccessLocker accesslocker_( obj ) 47 #define mLockMonitorable4Write(obj) \ 48 Monitorable::AccessLocker accesslocker_( obj, false ) 49 #define mMonitorableLock2Write(obj) accesslocker_.convertToWrite() 50 #define mMonitorableReLock(obj) accesslocker_.reLock() 51 #define mMonitorableUnlockAllAccess(obj) accesslocker_.unlockNow() 52 #define mMonitorableAccessLocker(obj) accesslocker_ 53 #define mSendMonitorableChgNotif(obj,typ,id) \ 54 (obj).sendChgNotif(accesslocker_,typ,id) 55 #define mSendMonitorableEntireObjChgNotif(obj) \ 56 mSendMonitorableChgNotif(obj,Monitorable::cEntireObjectChange(), \ 57 Monitorable::cEntireObjectChgID()) 60 #define mLock4Read() mLockMonitorable4Read(*this) 61 #define mLock4Write() mLockMonitorable4Write(*this) 62 #define mLock2Write() mMonitorableLock2Write(*this) 63 #define mReLock() mMonitorableReLock(*this) 64 #define mUnlockAllAccess() mMonitorableUnlockAllAccess(*this) 65 #define mAccessLocker() mMonitorableAccessLocker(*this) 66 #define mSendChgNotif(typ,id) mSendMonitorableChgNotif(*this,typ,id) 67 #define mSendEntireObjChgNotif() mSendMonitorableEntireObjChgNotif(*this) 71 #define mDeclGenMonitorableAssignment(clss) \ 73 void copyClassData(const clss&); \ 74 ChangeType compareClassData(const clss&) const; \ 76 void copyAll(const clss&); \ 79 clss& operator =(const clss&); \ 80 bool operator ==(const clss&) const; \ 81 inline bool operator !=( const clss& oth ) const \ 82 { return !(*this == oth); } \ 83 virtual clss* clone() const { return (clss*)getClone(); } \ 84 ChangeType compareWith(const Monitorable&) const 105 #define mDeclAbstractMonitorableAssignment(clss) \ 106 mDeclGenMonitorableAssignment(clss) 111 #define mDeclMonitorableAssignment(clss) \ 112 mDeclGenMonitorableAssignment(clss); \ 113 virtual clss* getClone() const { return new clss( *this ); } 116 #define mImplEmptyMonitorableCopyClassData( clssnm ) \ 117 void clssnm::copyClassData( const clssnm& oth ) \ 121 #define mImplAlwaysDifferentMonitorableCompareClassData( clssnm ) \ 122 Monitorable::ChangeType clssnm::compareClassData( const clssnm& oth ) const \ 124 return cEntireObjectChange(); \ 127 #define mImplEmptyMonitorableCompare( clssnm ) \ 128 Monitorable::ChangeType clssnm::compareClassData( const clssnm& oth ) const \ 130 return cNoChange(); \ 161 #define mGenImplMonitorableAssignment(pfx,clss,baseclss) \ 162 pfx clss& clss::operator =( const clss& oth ) \ 164 const ChangeType chgtyp = compareWith( oth ); \ 165 if ( chgtyp != cNoChange() ) \ 168 AccessLocker lckr( oth ); \ 170 mSendChgNotif( chgtyp, cUnspecChgID() ); \ 175 pfx bool clss::operator ==( const clss& oth ) const \ 178 return compareWith( oth ) == cNoChange(); \ 181 pfx void clss::copyAll( const clss& oth ) \ 183 baseclss::copyAll( oth ); \ 184 AccessLocker lckr( oth ); \ 185 copyClassData( oth ); \ 188 pfx Monitorable::ChangeType clss::compareWith( const Monitorable& mon ) const \ 190 if ( this == &mon ) \ 191 return cNoChange(); \ 192 mDynamicCastGet( const clss*, oth, &mon ); \ 194 return cEntireObjectChange(); \ 197 AccessLocker lckr( *oth ); \ 198 const ChangeType ct = compareClassData( *oth ); \ 199 mUnlockAllAccess(); \ 201 return ct != cNoChange() ? ct : baseclss::compareWith( *oth ); \ 205 #define mImplMonitorableAssignment(clss,baseclss) \ 206 mGenImplMonitorableAssignment(,clss,baseclss) 209 #define mImplMonitorableAssignmentWithNoMembers( clss, baseclss ) \ 210 mImplMonitorableAssignment(clss,baseclss) \ 211 mImplEmptyMonitorableCopyClassData( clss ) \ 212 mImplEmptyMonitorableCompare( clss ) 235 #define mStartMonitorableCompare() ChangeType chgtype = cNoChange() 237 #define mHandleMonitorableCompare( memb, val ) \ 238 if ( !(memb == oth.memb) ) \ 240 if ( chgtype == cNoChange() || chgtype == val ) \ 243 return cEntireObjectChange(); \ 246 #define mHandleMonitorableComparePtrContents( memb, val ) \ 247 if ( (memb && !oth.memb) || (!memb && oth.memb) || !(*memb == *oth.memb) ) \ 249 if ( chgtype == cNoChange() || chgtype == val ) \ 252 return cEntireObjectChange(); \ 255 #define mDeliverMonitorableCompare() return chgtype; 260 #define mDeliverSingCondMonitorableCompare(nochgcond,chgtype) \ 261 return (nochgcond) ? cNoChange() : chgtype 266 #define mDeliverYesNoMonitorableCompare(nochgcond) \ 267 mDeliverSingCondMonitorableCompare( nochgcond, cEntireObjectChange() ) 282 template <
class TMember,
class TSetTo>
#define mLock4Read()
Definition: monitor.h:60
int ChangeType
Definition: monitorable.h:80
#define mLock2Write()
Definition: monitor.h:62
int64_t IDType
Definition: monitorable.h:83
#define mSendChgNotif(typ, id)
Definition: monitor.h:66
void setMemberSimple(TMember &, TSetTo, ChangeType, IDType)
the set function used by mImplSimpleMonitoredSet
Definition: monitor.h:283
T getMemberSimple(const T &) const
the get function used by mImplSimpleMonitoredGet
Definition: monitor.h:273