NAMD
BroadcastMgr.C
Go to the documentation of this file.
1 
7 #include "UniqueSet.h"
8 #include "UniqueSetIter.h"
9 #include "BroadcastMgr.decl.h"
10 #include "BroadcastMgr.h"
11 #include "BroadcastClient.h"
12 #include "BroadcastObject.h"
13 #include "ProcessorPrivate.h"
14 #define MIN_DEBUG_LEVEL 10
15 #define DEBUGM
16 #include "Debug.h"
17 
19  UniqueSetIter<BOID> boidIter(boid);
20  for (boidIter = boidIter.begin(); boidIter != boidIter.end(); boidIter++) {
21  delete boidIter->broadcastSet;
22  if (boidIter->taggedMsg) {
23  delete boidIter->taggedMsg;
24  }
25  }
26 }
27 
29 {
30  int sum=0;
31  UniqueSetIter<BOID> boidIter(boid);
32  for (boidIter = boidIter.begin(); boidIter != boidIter.end(); boidIter++) {
33  sum+=boidIter->broadcastSet->size();
34  }
35  return sum;
36 }
37 
39 {
40  int sum=0;
41  UniqueSetIter<BOID> boidIter(boid);
42  for (boidIter = boidIter.begin(); boidIter != boidIter.end(); boidIter++) {
43  sum+=boidIter->taggedMsg->size();
44  }
45  return sum;
46 }
47 
48 
49 int
50 BroadcastMgr::getbuf(BroadcastClient &b, int tag, void *msg) {
51  int rval = -1;
52  TaggedMsg *tm;
53  BOID* boidTmp = boid.find(BOID(b.id));
54  if (!boidTmp) {
55  return(-2);
56  }
57  if ( (tm = (boidTmp->taggedMsg->find(TaggedMsg(tag)))) ) {
58  rval = tm->msgSize;
59  memcpy(msg, tm->msg, tm->msgSize);
60  if (!--(tm->counter)) {
61  (boid.find(BOID(b.id)))->taggedMsg->del(TaggedMsg(tag));
62  }
63  }
64  return(rval);
65 }
66 
67 
68 void
69 BroadcastMgr::send(BroadcastClient &b, int tag, void *buf, size_t size) {
70  BroadcastMsg* msg = new BroadcastMsg;
71  memcpy((void*)(msg->msg),buf,size);
72  msg->size = (int)size;
73  msg->tag = tag;
74  msg->id = b.id;
75  msg->node = CkMyPe();
76  CProxy_BroadcastMgr(thisgroup).recvBroadcast(msg);
77 }
78 
79 void
81  BOID *b;
82  if (!(b = boid.find(BOID(bc.id)))) {
83  boid.add(BOID(bc.id));
84  b = boid.find(BOID(bc.id));
87  }
89 }
90 
91 void
93  BOID *b;
94  if ( (b = boid.find(BOID(bc.id))) ) {
96  if (!b->broadcastSet->size()) {
97  delete b->broadcastSet;
98  b->broadcastSet = 0;
99  delete b->taggedMsg;
100  b->taggedMsg = 0;
101  }
102  }
103 }
104 
105 void
107  BOID *b;
108  int counter;
109  // Check if msg->id has any registrants
110  if ( (b = boid.find(BOID(msg->id))) ) {
111  // add message to taggedMsg container
112  counter = b->broadcastSet->size();
113  if (msg->node == CkMyPe()) counter--; // get rid of sender
114  if ( counter < 0 ) NAMD_bug("BroadcastMgr::recvBroadcast counter < 0");
115  else if ( counter > 0 ) {
116  b->taggedMsg->add(TaggedMsg(msg->tag,msg->size,counter,msg->msg));
117 
118  // inform all registrants of mew message
120  for (bcIter = bcIter.begin(); bcIter != bcIter.end(); bcIter++) {
121  bcIter->broadcastClient->awaken(msg->id, msg->tag);
122  }
123  }
124  }
125  delete msg;
126 }
127 
128 #include "BroadcastMgr.def.h"
129 
Elem * find(const Elem &elem)
Definition: UniqueSet.h:60
int size(void) const
Definition: UniqueSet.h:58
void recvBroadcast(BroadcastMsg *msg)
Definition: BroadcastMgr.C:106
void awaken(int id, int tag)
int add(const Elem &elem)
Definition: UniqueSet.h:52
UniqueSet< TaggedMsg > * taggedMsg
Definition: BroadcastMgr.h:83
int getbuf(BroadcastClient &b, int tag, void *msg)
Definition: BroadcastMgr.C:50
int boidBroadcastSize()
Definition: BroadcastMgr.C:28
char msg[BCASTMSGSIZE]
Definition: BroadcastMgr.h:66
void unsubscribe(BroadcastClient &bc)
Definition: BroadcastMgr.C:92
UniqueSetIter< T > begin(void) const
Definition: UniqueSetIter.h:55
void send(BroadcastClient &b, int tag, void *buf, size_t)
Definition: BroadcastMgr.C:69
void NAMD_bug(const char *err_msg)
Definition: common.C:195
~BroadcastMgr(void)
Definition: BroadcastMgr.C:18
int boidTaggedMsgSize()
Definition: BroadcastMgr.C:38
UniqueSetIter< T > end(void) const
Definition: UniqueSetIter.h:64
void subscribe(BroadcastClient &bc)
Definition: BroadcastMgr.C:80
BroadcastClient * broadcastClient
Definition: BroadcastMgr.h:47
UniqueSet< BroadcastClientElem > * broadcastSet
Definition: BroadcastMgr.h:82
int del(const Elem &elem)
Definition: UniqueSet.h:56