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 21typedef int wxRecursionGuardFlag; 22 23// ---------------------------------------------------------------------------- 24// wxRecursionGuard is the simplest way to protect a function from reentrancy 25// ---------------------------------------------------------------------------- 26 27class WXDLLIMPEXP_BASE wxRecursionGuard 28{ 29public: 30 wxRecursionGuard(wxRecursionGuardFlag& flag) 31 : m_flag(flag) 32 { 33 m_isInside = flag++ != 0; 34 } 35 36 ~wxRecursionGuard() 37 { 38 wxASSERT_MSG( m_flag > 0, wxT("unbalanced wxRecursionGuards!?") ); 39 40 m_flag--; 41 } 42 43 bool IsInside() const { return m_isInside; } 44 45private: 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