00001 #ifndef ERIS_CLASS_DISPATCH_H
00002 #define ERIS_CLASS_DISPATCH_H
00003
00004 #include <Eris/Dispatcher.h>
00005
00006 #include <sigc++/object.h>
00007
00008 namespace Eris
00009 {
00010
00011 class TypeInfo;
00012 class Connection;
00013
00014 class ClassDispatcher : public Dispatcher, virtual public SigC::Object
00015 {
00016 public:
00017 ClassDispatcher(const std::string &nm, Connection *conn);
00018 virtual ~ClassDispatcher();
00019
00020 virtual bool dispatch(DispatchContextDeque &dq);
00021
00022 virtual Dispatcher* addSubdispatch(Dispatcher *d, const std::string cl);
00023 virtual void rmvSubdispatch(Dispatcher *sub);
00024
00025 virtual Dispatcher* getSubdispatch(const std::string &nm);
00026
00027 virtual bool empty()
00028 { return _subs.empty(); }
00029
00030 static Dispatcher* newAnonymous(Connection *conn);
00031 protected:
00032 typedef struct {
00033 Dispatcher* sub;
00034 TypeInfo* type;
00035 } _Class;
00036
00037 virtual void purge();
00038
00039 void boundType(TypeInfo *tp);
00040 void boundInsert(const _Class &cl);
00041
00042 typedef std::list<_Class> ClassDispatcherList;
00043 ClassDispatcherList _subs;
00044 Connection* _conn;
00045 };
00046
00047 }
00048
00049 #endif