//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: singleton.hpp
//      Краткое описание: паттерн - одиночка
//

#ifndef DSE_KERNEL_MISC_SINGLETON_HPP
#define DSE_KERNEL_MISC_SINGLETON_HPP

#include <Darkstar/common.hpp>

namespace ker
{
	template <typename T>
	class SingletonHolder
	{
	private:
		static scoped_ptr<T> data;

		SingletonHolder(const SingletonHolder<T>& t);
		SingletonHolder<T>& operator=(const SingletonHolder<T>& t);
	protected:
		SingletonHolder();
		virtual ~SingletonHolder();
	public:
		static scoped_ptr<T>& ptr();
	};

	template <typename T> scoped_ptr<T> SingletonHolder<T>::data(NULL);
};

#include <Darkstar/Kernel/Misc/singleton.inl>

#endif