home *** CD-ROM | disk | FTP | other *** search
- //+---------------------------------------------------------------------------
- //
- // Microsoft Windows
- // Copyright 1992 - 1997 Microsoft Corporation.
- //
- // File: stablize.h
- //
- // Contents: Stabilization Classes used to stabilize objects during
- // re-entrant calls.
- //
- // Classes: CSafeRefCount
- // CStabilize
- //
- // History: 8-26-94 stevebl Modified from code written by AlexGo
- //
- //----------------------------------------------------------------------------
-
- #ifndef __STABLIZE__
- #define __STABLIZE__
-
- //+-------------------------------------------------------------------------
- //
- // Class: CSafeRefCount
- //
- // Purpose: A concrete class for objects to inherit from.
- // CSafeRefCount will keep track of reference counts,
- // nesting counts, and zombie states, allowing objects
- // to easily manage the liveness of their memory images.
- //
- // Interface:
- //
- // History: dd-mmm-yy Author Comment
- // 01-Aug-94 alexgo author
- //
- // Notes: inherits CPrivAlloc
- //
- //--------------------------------------------------------------------------
-
- class CSafeRefCount
- {
- public:
- ULONG SafeAddRef();
- ULONG SafeRelease();
- ULONG IncrementNestCount();
- ULONG DecrementNestCount();
- CSafeRefCount();
- virtual ~CSafeRefCount();
-
- private:
-
- ULONG m_cRefs;
- ULONG m_cNest;
- BOOL m_fInDelete;
- };
-
- //+-------------------------------------------------------------------------
- //
- // Class: CStabilize
- //
- // Purpose: An instance of this class should be allocated on the
- // stack of every object method that makes an outgoing call.
- // The contstructor takes a pointer to the object's base
- // CSafeRefCount class.
- //
- // Interface:
- //
- // History: dd-mmm-yy Author Comment
- // 01-Aug-94 alexgo author
- //
- // Notes: The constructor will increment the nest count of the
- // object while the destructor will decrement it.
- //
- //--------------------------------------------------------------------------
-
- class CStabilize
- {
- public:
- inline CStabilize( CSafeRefCount *pObjSafeRefCount );
- inline ~CStabilize();
-
- private:
- CSafeRefCount * m_pObjSafeRefCount;
- };
-
- inline CStabilize::CStabilize( CSafeRefCount *pObjSafeRefCount )
- {
- pObjSafeRefCount->IncrementNestCount();
- m_pObjSafeRefCount = pObjSafeRefCount;
- }
-
- inline CStabilize::~CStabilize()
- {
- m_pObjSafeRefCount->DecrementNestCount();
- }
-
- #endif // __STABLIZE__
-