summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-03-23 12:23:21 +0000
committerCaolán McNamara <caolanm@redhat.com>2012-03-23 12:23:21 +0000
commit4d74905bf959fcce368f2dbf79021417484b75b8 (patch)
treeadd4c8dc80b73ddbeaa58ae53b9f49b83515c8ff
parentWaE: need a virtual dtor (diff)
downloadbinfilter-4d74905bf959fcce368f2dbf79021417484b75b8.tar.gz
binfilter-4d74905bf959fcce368f2dbf79021417484b75b8.zip
move SvWeakBase etc into binfilter
-rw-r--r--binfilter/inc/bf_svtools/cancel.hxx49
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