00001
00008 #ifndef EACH_TO_MANY_MULTICAST_STRATEGY
00009 #define EACH_TO_MANY_MULTICAST_STRATEGY
00010
00011 #include "ComlibManager.h"
00012 #include "routerstrategy.h"
00013
00028 class EachToManyMulticastStrategy : public RouterStrategy, public CharmStrategy {
00029 protected:
00030
00032 virtual void commonInit(int*);
00033
00034 public:
00038 EachToManyMulticastStrategy(int strategyId, CkGroupID src, CkGroupID dest,
00039 int nsrcpes=0, int *srcpelist=0,
00040 int ndestpes =0, int *destpelist =0);
00041
00044 EachToManyMulticastStrategy(int substrategy, CkArrayID src,
00045 CkArrayID dest, int nsrc=0,
00046 CkArrayIndex *srcelements=0, int ndest=0,
00047 CkArrayIndex *destelements=0);
00048
00049 EachToManyMulticastStrategy(CkMigrateMessage *m) : RouterStrategy(m), CharmStrategy(m) {
00050 ComlibPrintf("[%d] EachToManyMulticast migration constructor\n",CkMyPe());
00051 };
00052
00053 ~EachToManyMulticastStrategy();
00054
00055 void insertMessage(MessageHolder *msg) {
00056
00057 insertMessage((CharmMessageHolder*)msg);
00058 }
00059
00060
00061 virtual void insertMessage(CharmMessageHolder *msg);
00062
00063 virtual void pup(PUP::er &p);
00064 virtual void localMulticast(void *msg);
00065
00066 virtual void notifyDone();
00067
00069 virtual void deliver(char *, int);
00070
00073 virtual void handleMessage(void *msg) {
00074 envelope *env = (envelope*)msg;
00075
00076 deliver((char*)msg, env->getTotalsize());
00077 }
00078
00079 PUPable_decl(EachToManyMulticastStrategy);
00080
00081 };
00082 #endif
00083