#ifndef ICEMODULE_H #define ICEMODULE_H #include #include #include #include #include #include typedef std::map ParamMap; class IceDaemon; class IceDaemonModule { protected: IceDaemonModule(const IceDaemon *); void executeTask(const std::string & name, const ParamMap & params) const; void executeView(const std::string & name, RowSetPresenterPtr p, const ParamMap & params) const; private: const IceDaemon * const iceDaemon; }; class IceDaemonAdapterHandler : public IntrusivePtrBase { public: virtual void add(Ice::ObjectAdapterPtr, const IceDaemon *, Ice::CommunicatorPtr) const = 0; virtual void remove(Ice::ObjectAdapterPtr, Ice::CommunicatorPtr) const = 0; }; typedef boost::intrusive_ptr IceDaemonAdapterHandlerPtr; typedef GenLoader IceDaemonAdapterHandlerLoader; template class IcePresenter : public RowSetPresenter { public: typedef boost::function TargetAssigner; typedef std::map MemberTargets; SimpleMessageException(NoSuchMember); IcePresenter(IC & t); virtual void addNamedValue(const Glib::ustring & member, const VariableType & value) const { safeMapLookup(memberTargets, member)(&*current, value); } virtual void addNewRow(const Glib::ustring&) const { target.push_back(typename IC::value_type()); } virtual void finishRow() const { current = target.end(); } // The target array already exists, so these need not do anything virtual void addNewArray(const Glib::ustring&, bool) const { } virtual void finishArray(bool) const { } virtual void init() { } private: IC & target; mutable typename IC::iterator current; const MemberTargets memberTargets; template static void memberAssign(T * t, M T::*m, const VariableType & v) { t->*m = v.as(); } }; #endif