diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-03-23 12:23:21 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-03-23 12:23:21 +0000 |
commit | 4d74905bf959fcce368f2dbf79021417484b75b8 (patch) | |
tree | add4c8dc80b73ddbeaa58ae53b9f49b83515c8ff | |
parent | WaE: need a virtual dtor (diff) | |
download | binfilter-4d74905bf959fcce368f2dbf79021417484b75b8.tar.gz binfilter-4d74905bf959fcce368f2dbf79021417484b75b8.zip |
move SvWeakBase etc into binfilter
-rw-r--r-- | binfilter/inc/bf_svtools/cancel.hxx | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/binfilter/inc/bf_svtools/cancel.hxx b/binfilter/inc/bf_svtools/cancel.hxx index 5cbab0a73..7dc72c1a2 100644 --- a/binfilter/inc/bf_svtools/cancel.hxx +++ b/binfilter/inc/bf_svtools/cancel.hxx @@ -48,6 +48,55 @@ typedef SvPtrarr SfxCancellables_Impl; //------------------------------------------------------------------------- +class SvWeakBase; +class SvWeakHdl : public SvRefBase +{ + friend class SvWeakBase; + SvWeakBase* _pObj; +public: + void ResetWeakBase( ) { _pObj = 0; } +private: + SvWeakHdl( SvWeakBase* pObj ) : _pObj( pObj ) {} +public: + SvWeakBase* GetObj() { return _pObj; } +}; + +SV_DECL_IMPL_REF( SvWeakHdl ) + +class SvWeakBase +{ + SvWeakHdlRef _xHdl; +public: + SvWeakHdl* GetHdl() { return _xHdl; } + + // Wg CompilerWarnung nicht ueber Initializer + SvWeakBase() { _xHdl = new SvWeakHdl( this ); } + ~SvWeakBase() { _xHdl->ResetWeakBase(); } +}; + +#define SV_DECL_WEAK( ClassName ) \ +class ClassName##Weak \ +{ \ + SvWeakHdlRef _xHdl; \ +public: \ + inline ClassName##Weak( ) {} \ + inline ClassName##Weak( ClassName* pObj ) { \ + if( pObj ) _xHdl = pObj->GetHdl(); } \ + inline void Clear() { _xHdl.Clear(); } \ + inline ClassName##Weak& operator = ( ClassName * pObj ) { \ + _xHdl = pObj ? pObj->GetHdl() : 0; return *this; } \ + inline sal_Bool Is() const { \ + return _xHdl.Is() && _xHdl->GetObj(); } \ + inline ClassName * operator & () const { \ + return (ClassName*) ( _xHdl.Is() ? _xHdl->GetObj() : 0 ); } \ + inline ClassName * operator -> () const { \ + return (ClassName*) ( _xHdl.Is() ? _xHdl->GetObj() : 0 ); } \ + inline ClassName & operator * () const { \ + return *(ClassName*) _xHdl->GetObj(); } \ + inline operator ClassName * () const { \ + return (ClassName*) (_xHdl.Is() ? _xHdl->GetObj() : 0 ); } \ +}; + class SfxCancelManager: public SfxBroadcaster , public SvWeakBase |