//______________________________________________________________________________
//
// Класс-указатель на CBLContext, определенный через CValue
//______________________________________________________________________________
//
#ifndef __SAFE__CONTEXT__INCLUDED
#define __SAFE__CONTEXT__INCLUDED

class CSafeContext
{
private:

	CValue *m_pValue;
	BOOL m_bIsGroupContext;
	BOOL m_bFlagAutoDestroy;
private:

	// условная компиляция
	inline BOOL debug() const;

	// назначение ссылки
	void Assign(const CBLContext *pCont);

	// освобождение ссылки
	void Release();

public:

	// инициализаторы
	CSafeContext(BOOL m_bFlagAutoDestroy = FALSE);
	CSafeContext(CBLContext *pCont, BOOL m_bFlagAutoDestroy = FALSE);
	CSafeContext(const CSafeContext& ref);

	// создание объекта заданного типа
	CSafeContext(LPCSTR szName, BOOL m_bFlagAutoDestroy = FALSE);

	virtual ~CSafeContext();

	// является групповым контекстом
	inline BOOL IsGroupContext() const;

	void IncrRef();
	void DecrRef();

	// операторы
	CSafeContext& operator =(const CBLContext* pCont);
	operator bool() const;
	operator !() const;
	operator CBLContext *() const;
};

#endif //#ifndef __SAFE__CONTEXT__INCLUDED
