00001 #ifndef PROJECTEDEVENTSENDER_H_
00002 #define PROJECTEDEVENTSENDER_H_
00003
00004 #include "globals.h"
00005 #include "EvSimObject.h"
00006 #include "SimContext.h"
00007 #include "DirectEventSender.h"
00008
00009 #include "evesim_hash.h"
00010
00011 #ifndef SWIG
00012
00013 #include <utility>
00014 using std::make_pair;
00015
00016 #endif
00017
00018 class ProjectedOutputPortIterator;
00019
00020
00021 class ProjectedEventSender : public DirectEventSender {
00022 public:
00023 virtual ~ProjectedEventSender();
00024
00025 virtual global_proj_out_port_id_t getProjOutPortGlobalID(port_id_t port_id) const = 0;
00026
00027 virtual void setFirstProjOutPortGlobalID(global_proj_out_port_id_t port_id) = 0;
00028
00029 virtual void changeProjectedEventTime(SimContext &ai, port_id_t port_id,Time new_time);
00030
00031 virtual void setupProjectedOutPorts() = 0;
00032
00033 virtual ProjectedOutputPortIterator getProjectedPortIterator() = 0;
00034
00035 virtual pair<port_id_t, global_proj_out_port_id_t> getFirstProjectedPortInfo() = 0;
00036
00037 };
00038
00039
00040
00041
00042 class SingleOutputProjectedEventSender : public ProjectedEventSender {
00043 public:
00044 virtual ~SingleOutputProjectedEventSender();
00045
00046 virtual global_proj_out_port_id_t getProjOutPortGlobalID(port_id_t port_id) const;
00047
00048 virtual void setFirstProjOutPortGlobalID(global_proj_out_port_id_t port_id);
00049
00050 virtual ProjectedOutputPortIterator getProjectedPortIterator();
00051
00052 virtual pair<port_id_t, global_proj_out_port_id_t> getFirstProjectedPortInfo();
00053
00054 virtual void setupProjectedOutPorts() {};
00055
00056 protected:
00057 global_proj_out_port_id_t first_proj_port_global_id;
00058 };
00059
00060
00061 class MultiOutputProjectedEventSender : public ProjectedEventSender {
00062
00063 public:
00064 virtual ~MultiOutputProjectedEventSender() {};
00065
00066 virtual global_proj_out_port_id_t getProjOutPortGlobalID(port_id_t port_id) const;
00067
00068 virtual void setFirstProjOutPortGlobalID(global_proj_out_port_id_t port_id);
00069
00070 virtual void setupProjectedOutPorts();
00071
00072 virtual ProjectedOutputPortIterator getProjectedPortIterator();
00073
00074 virtual pair<port_id_t, global_proj_out_port_id_t> getFirstProjectedPortInfo();
00075
00076 protected:
00077 typedef hash_map< port_id_t, global_proj_out_port_id_t, evesim::hash<port_id_t> > ProjOutPortsGlobalIDMap;
00078
00079 friend class ProjectedOutputPortIterator;
00080
00081 ProjOutPortsGlobalIDMap proj_out_ports_global_ids;
00082 };
00083
00084
00085 #endif