#pragma once
#include <list>
#include<string>

typedef std::string State;

class CivInpObserver;

/**
*  inp文件
*/
class CivInpSubject
{
public:
	virtual  ~CivInpSubject();

	/**
	* @brief 绑定观察者
	* @param [obsever]  观察者对象
	*/
	void attach(CivInpObserver* obsever);

	/**
	* @brief  解除观察者
	* @param [obsever]  观察者对象
	*/
	void detach(CivInpObserver* obsever);

	/**
	*@brief 发送通知
	*/
	virtual void notify();

	/**
	*@brief 设置状态
	*/
	virtual void setState(const State& st) ;

	/**
	*@brief 获取状态，子类实现
	*/
	virtual State state() ;

protected:

	State mState; // 更新状态

private:
	std::list<CivInpObserver*> mObservers; // 众多观察者
};
