| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        scopeguard.h
 
- // Purpose:     interface of global functions
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     @class wxScopeGuard
 
-     Scope guard is an object which allows executing an action on scope exit.
 
-     The objects of this class must be constructed using wxMakeGuard() function.
 
-     @nolibrary
 
-     @category{misc}
 
-  */
 
- class wxScopeGuard
 
- {
 
- public:
 
-     /**
 
-         Call this method to dismiss the execution of the action on scope exit.
 
-         A typical example:
 
-         @code
 
-             Update1();
 
-             // ensure that changes done so far are rolled back if the next
 
-             // operation throws
 
-             wxScopeGuard guard = wxMakeGuard(RollBack);
 
-             Update2();
 
-             // it didn't throw so commit the changes, i.e. avoid rolling back
 
-             guard.Dismiss();
 
-         @endcode
 
-      */
 
-     void Dismiss();
 
- };
 
- /** @addtogroup group_funcmacro_misc */
 
- //@{
 
- /**
 
-     Returns a scope guard object which will call the specified function with
 
-     the given parameters on scope exit.
 
-     This function is overloaded to take several parameters up to some
 
-     implementation-defined (but relatively low) limit.
 
-     The @a func should be a functor taking parameters of the types P1, ..., PN,
 
-     i.e. the expression @c func(p1, ..., pN) should be valid.
 
-  */
 
- template <typename F, typename P1, ..., typename PN>
 
- wxScopeGuard wxMakeGuard(F func, P1 p1, ..., PN pN);
 
- //@}
 
- /** @addtogroup group_funcmacro_misc */
 
- //@{
 
- /**
 
-     Ensure that the global @a function with a few (up to some
 
-     implementation-defined limit) is executed on scope exit, whether due to a
 
-     normal function return or because an exception has been thrown.
 
-     A typical example of its usage:
 
-     @code
 
-     void *buf = malloc(size);
 
-     wxON_BLOCK_EXIT1(free, buf);
 
-     @endcode
 
-     Please see the original article by Andrei Alexandrescu and Petru Marginean
 
-     published in December 2000 issue of C/C++ Users Journal for more details.
 
-     @see wxON_BLOCK_EXIT_OBJ0()
 
-     @header{wx/scopeguard.h}
 
- */
 
- #define wxON_BLOCK_EXIT(function, ...)
 
- #define wxON_BLOCK_EXIT0(function)
 
- #define wxON_BLOCK_EXIT1(function, p1)
 
- #define wxON_BLOCK_EXIT2(function, p1, p2)
 
- #define wxON_BLOCK_EXIT3(function, p1, p2, p3)
 
- //@}
 
- /** @addtogroup group_funcmacro_misc */
 
- //@{
 
- /**
 
-     This family of macros is similar to wxON_BLOCK_EXIT(), but calls a method
 
-     of the given object instead of a free function.
 
-     @header{wx/scopeguard.h}
 
- */
 
- #define wxON_BLOCK_EXIT_OBJ(object, method, ...)
 
- #define wxON_BLOCK_EXIT_OBJ0(object, method)
 
- #define wxON_BLOCK_EXIT_OBJ1(object, method, p1)
 
- #define wxON_BLOCK_EXIT_OBJ2(object, method, p1, p2)
 
- #define wxON_BLOCK_EXIT_OBJ3(object, method, p1, p2, p3)
 
- //@}
 
- /** @addtogroup group_funcmacro_misc */
 
- //@{
 
- /**
 
-     This family of macros is similar to wxON_BLOCK_OBJ(), but calls a method
 
-     of @c this object instead of a method of the specified object.
 
-     @header{wx/scopeguard.h}
 
- */
 
- #define wxON_BLOCK_EXIT_THIS(method, ...)
 
- #define wxON_BLOCK_EXIT_THIS0(method)
 
- #define wxON_BLOCK_EXIT_THIS1(method, p1)
 
- #define wxON_BLOCK_EXIT_THIS2(method, p1, p2)
 
- #define wxON_BLOCK_EXIT_THIS3(method, p1, p2, p3)
 
- //@}
 
- /** @addtogroup group_funcmacro_misc */
 
- //@{
 
- /**
 
-     This macro sets a variable to the specified value on scope exit.
 
-     Example of usage:
 
-     @code
 
-     void foo()
 
-     {
 
-         bool isDoingSomething = true;
 
-         {
 
-             wxON_BLOCK_EXIT_SET(isDoingSomething, false);
 
-             ... do something ...
 
-         }
 
-         ... isDoingSomething is false now ...
 
-     }
 
-     @endcode
 
-     Notice that @a value is copied, i.e. stored by value, so it can be a
 
-     temporary object returned by a function call, for example.
 
-     @see wxON_BLOCK_EXIT_OBJ0(), wxON_BLOCK_EXIT_NULL()
 
-     @header{wx/scopeguard.h}
 
- */
 
- #define wxON_BLOCK_EXIT_SET(var, value)
 
- /**
 
-     This macro sets the pointer passed to it as argument to NULL on scope exit.
 
-     It must be used instead of wxON_BLOCK_EXIT_SET() when the value being set
 
-     is @c NULL.
 
-     @header{wx/scopeguard.h}
 
-  */
 
- #define wxON_BLOCK_EXIT_NULL(ptr)
 
- //@}
 
 
  |