]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/ptr_scpd.h
Smartphone menus.
[wxWidgets.git] / include / wx / ptr_scpd.h
index ff287cfad48d64845a6d58def84fd408e62d4baa..487765c82c528330b4a6fa972017925fef2d62d9 100644 (file)
@@ -11,7 +11,7 @@
 
 //  This class closely follows the implementation of the boost
 //  library scoped_ptr and is an adaption for c++ macro's in 
-//  the wxWindows project. The original authors of the boost
+//  the wxWidgets project. The original authors of the boost
 //  scoped_ptr are given below with their respective copyrights.
 
 //  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
@@ -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__