1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/recguard.h 3 // Purpose: declaration and implementation of wxRecursionGuard class 4 // Author: Vadim Zeitlin 5 // Modified by: 6 // Created: 14.08.2003 7 // RCS-ID: $Id: recguard.h 61872 2009-09-09 22:37:05Z VZ $ 8 // Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> 9 // Licence: wxWindows licence 10 /////////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_RECGUARD_H_ 13 #define _WX_RECGUARD_H_ 14 15 #include "wx/defs.h" 16 17 // ---------------------------------------------------------------------------- 18 // wxRecursionGuardFlag is used with wxRecursionGuard 19 // ---------------------------------------------------------------------------- 20 21 typedef int wxRecursionGuardFlag; 22 23 // ---------------------------------------------------------------------------- 24 // wxRecursionGuard is the simplest way to protect a function from reentrancy 25 // ---------------------------------------------------------------------------- 26 27 class WXDLLIMPEXP_BASE wxRecursionGuard 28 { 29 public: wxRecursionGuard(wxRecursionGuardFlag & flag)30 wxRecursionGuard(wxRecursionGuardFlag& flag) 31 : m_flag(flag) 32 { 33 m_isInside = flag++ != 0; 34 } 35 ~wxRecursionGuard()36 ~wxRecursionGuard() 37 { 38 wxASSERT_MSG( m_flag > 0, wxT("unbalanced wxRecursionGuards!?") ); 39 40 m_flag--; 41 } 42 IsInside()43 bool IsInside() const { return m_isInside; } 44 45 private: 46 wxRecursionGuardFlag& m_flag; 47 48 // true if the flag had been already set when we were created 49 bool m_isInside; 50 }; 51 52 #endif // _WX_RECGUARD_H_ 53 54