#ifndef BINDABLE_VAR_H_INCLUDED
#define BINDABLE_VAR_H_INCLUDED

#include "boost/signal.hpp"
#include "boost/variant.hpp"

namespace SE
{

//Must be stored in shared_ptr:

template<typename TYPENAME>
class TBindableVar
{
protected:
	TYPENAME Variable;

public:

	boost::signal<void(const TYPENAME&)> OnVarChanged;

	TBindableVar()
	{
	}

	TBindableVar(const TYPENAME&& var)
		: Variable(var)
	{
	}

	operator TYPENAME()
	{
		return Variable;
	}

	TYPENAME operator()()
	{
		return Variable;
	}

	TBindableVar<TYPENAME>& operator=(const TYPENAME& var)
	{
		Variable = var;
		OnVarChanged(Variable);
		return *this;
	}

};


} //namespace SE

#endif
