#pragma once

//! @file Mix/Reference.h
//! @brief リファレンスクラスインクルードファイル

#include "Mix/AtomicValue.h"

namespace Mix{

	//! @class Reference
	//! @brief リファレンスクラス
	class _MIX_DLL_API Reference
	{
	protected:
		MIX_DECLARE_ALLOCATOR();

	private:
		Mix::AtomicValue m_Count;

	protected:
		//! @brief コンストラクタ
		Reference( void );
		//! @brief コンストラクタ
		//! @param count 初期の参照数
		Reference( Long32 count );
		//! @brief デストラクタ
		virtual ~Reference( void );

	public:
		//! @brief 参照数を 1 増やします
		void AddRef( void );
		//! @brief 参照数を 1 減らします
		void Release( void );

		//! @brief 参照数を取得します
		//! @return 参照数を返します
		Long32 GetRefCount( void );
	};

};
