]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/ptr_scpd.h
Patch #826420, and also adapted to new SWIG
[wxWidgets.git] / include / wx / ptr_scpd.h
index ff287cfad48d64845a6d58def84fd408e62d4baa..d0a24daec3bbfed9e1fb7227c9d807ef4e5c881e 100644 (file)
@@ -182,5 +182,32 @@ void name::reset(T * p){                \
     }                                   \
 }
 
+// ----------------------------------------------------------------------------
+// "Tied" scoped pointer: same as normal one but also sets the value of
+//                        some other variable to the pointer value
+// ----------------------------------------------------------------------------
+
+#define wxDEFINE_TIED_SCOPED_PTR_TYPE(T)                                      \
+    wxDEFINE_SCOPED_PTR_TYPE(T);                                              \
+    class T ## TiedPtr : public T ## Ptr                                      \
+    {                                                                         \
+    public:                                                                   \
+        T ## TiedPtr(T **pp, T *p)                                            \
+            : T ## Ptr(p), m_pp(pp)                                           \
+        {                                                                     \
+            m_pOld = *pp;                                                     \
+            *pp = p;                                                          \
+        }                                                                     \
+                                                                              \
+        ~ T ## TiedPtr()                                                      \
+        {                                                                     \
+            *m_pp = m_pOld;                                                   \
+        }                                                                     \
+                                                                              \
+    private:                                                                  \
+        T **m_pp;                                                             \
+        T *m_pOld;                                                            \
+    }
+
 #endif // __WX_SCOPED_POINTER__