1 #ifndef HEADER_BASEAGENT_H 2 #define HEADER_BASEAGENT_H 3 4 #include "NoCopy.h" 5 #include "BaseListener.h" 6 #include "ExInfo.h" 7 #include "NameException.h" 8 #include "AgentPack.h" 9 10 #include <string> 11 12 /** 13 * Ancestor for all agents. 14 */ 15 class BaseAgent : public NoCopy, public BaseListener { 16 private: 17 bool m_initialized; 18 protected: own_init()19 virtual void own_init() {} own_update()20 virtual void own_update() {} own_shutdown()21 virtual void own_shutdown() {} 22 public: 23 BaseAgent(); ~BaseAgent()24 virtual ~BaseAgent() {} isInitialized()25 bool isInitialized() { return m_initialized; } 26 27 void init(); 28 void update(); 29 void shutdown(); 30 }; 31 32 /** 33 * Example: AGENT(VideoAgent, Name::VIDEO_NAME) 34 * 35 * Enables to obtain typed pointer 36 * static VideoAgent *VideoAgent::agent(); 37 */ 38 #define AGENT(TYPE, NAME) \ 39 public: \ 40 virtual const char *getName() const { return (NAME); } \ 41 static TYPE *agent() \ 42 { \ 43 TYPE *result = dynamic_cast<TYPE *>(AgentPack::getAgent(sName())); \ 44 if (NULL == result) { \ 45 throw NameException(ExInfo("cannot cast agent") \ 46 .addInfo("name", sName())); \ 47 } \ 48 return result; \ 49 } \ 50 private: \ 51 static const char *sName() { return (NAME); } 52 53 #endif 54