NAMD
Public Member Functions | Static Public Member Functions | List of all members
BroadcastMgr Class Reference

#include <BroadcastMgr.h>

Inheritance diagram for BroadcastMgr:

Public Member Functions

 BroadcastMgr ()
 
 ~BroadcastMgr (void)
 
int getbuf (BroadcastClient &b, int tag, void *msg)
 
void send (BroadcastClient &b, int tag, void *buf, size_t)
 
void subscribe (BroadcastClient &bc)
 
void unsubscribe (BroadcastClient &bc)
 
void recvBroadcast (BroadcastMsg *msg)
 
int boidSize ()
 
int boidBroadcastSize ()
 
int boidTaggedMsgSize ()
 

Static Public Member Functions

static BroadcastMgrObject ()
 

Detailed Description

Definition at line 86 of file BroadcastMgr.h.

Constructor & Destructor Documentation

◆ BroadcastMgr()

BroadcastMgr::BroadcastMgr ( )
inline

Definition at line 89 of file BroadcastMgr.h.

89  {
90  CkpvAccess(BroadcastMgr_instance) = this;
91  }

◆ ~BroadcastMgr()

BroadcastMgr::~BroadcastMgr ( void  )

Definition at line 18 of file BroadcastMgr.C.

References UniqueSetIter< T >::begin(), BOID::broadcastSet, UniqueSetIter< T >::end(), and BOID::taggedMsg.

18  {
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 }

Member Function Documentation

◆ boidBroadcastSize()

int BroadcastMgr::boidBroadcastSize ( )

Definition at line 28 of file BroadcastMgr.C.

References UniqueSetIter< T >::begin(), BOID::broadcastSet, UniqueSetIter< T >::end(), and UniqueSet< Elem >::size().

Referenced by SimpleBroadcastObject< Tensor >::getBcastSize().

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 }

◆ boidSize()

int BroadcastMgr::boidSize ( )
inline

Definition at line 104 of file BroadcastMgr.h.

References UniqueSet< Elem >::size().

Referenced by SimpleBroadcastObject< Tensor >::getSize().

104 { return boid.size();}
int size(void) const
Definition: UniqueSet.h:58

◆ boidTaggedMsgSize()

int BroadcastMgr::boidTaggedMsgSize ( )

Definition at line 38 of file BroadcastMgr.C.

References UniqueSetIter< T >::begin(), UniqueSetIter< T >::end(), UniqueSet< Elem >::size(), and BOID::taggedMsg.

Referenced by SimpleBroadcastObject< Tensor >::getTaggedSize().

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 }

◆ getbuf()

int BroadcastMgr::getbuf ( BroadcastClient b,
int  tag,
void *  msg 
)

Definition at line 50 of file BroadcastMgr.C.

References TaggedMsg::counter, UniqueSet< Elem >::find(), BroadcastClient::id, TaggedMsg::msg, TaggedMsg::msgSize, and BOID::taggedMsg.

50  {
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 }
Elem * find(const Elem &elem)
Definition: UniqueSet.h:60
UniqueSet< TaggedMsg > * taggedMsg
Definition: BroadcastMgr.h:83
char msg[BCASTMSGSIZE]
Definition: BroadcastMgr.h:66

◆ Object()

static BroadcastMgr* BroadcastMgr::Object ( )
inlinestatic

◆ recvBroadcast()

void BroadcastMgr::recvBroadcast ( BroadcastMsg msg)

Definition at line 106 of file BroadcastMgr.C.

References UniqueSet< Elem >::add(), BroadcastClient::awaken(), UniqueSetIter< T >::begin(), BroadcastClientElem::broadcastClient, BOID::broadcastSet, UniqueSetIter< T >::end(), UniqueSet< Elem >::find(), NAMD_bug(), UniqueSet< Elem >::size(), and BOID::taggedMsg.

106  {
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 }
Elem * find(const Elem &elem)
Definition: UniqueSet.h:60
int size(void) const
Definition: UniqueSet.h:58
int add(const Elem &elem)
Definition: UniqueSet.h:52
UniqueSet< TaggedMsg > * taggedMsg
Definition: BroadcastMgr.h:83
void NAMD_bug(const char *err_msg)
Definition: common.C:195
UniqueSet< BroadcastClientElem > * broadcastSet
Definition: BroadcastMgr.h:82

◆ send()

void BroadcastMgr::send ( BroadcastClient b,
int  tag,
void *  buf,
size_t  size 
)

Definition at line 69 of file BroadcastMgr.C.

References BroadcastClient::id.

Referenced by SimpleBroadcastObject< Tensor >::publish().

69  {
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 }

◆ subscribe()

void BroadcastMgr::subscribe ( BroadcastClient bc)

Definition at line 80 of file BroadcastMgr.C.

References UniqueSet< Elem >::add(), BOID::broadcastSet, UniqueSet< Elem >::find(), BroadcastClient::id, and BOID::taggedMsg.

Referenced by BroadcastClient::BroadcastClient().

80  {
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 }
Elem * find(const Elem &elem)
Definition: UniqueSet.h:60
int add(const Elem &elem)
Definition: UniqueSet.h:52
UniqueSet< TaggedMsg > * taggedMsg
Definition: BroadcastMgr.h:83
UniqueSet< BroadcastClientElem > * broadcastSet
Definition: BroadcastMgr.h:82

◆ unsubscribe()

void BroadcastMgr::unsubscribe ( BroadcastClient bc)

Definition at line 92 of file BroadcastMgr.C.

References BOID::broadcastSet, UniqueSet< Elem >::del(), UniqueSet< Elem >::find(), BroadcastClient::id, UniqueSet< Elem >::size(), and BOID::taggedMsg.

Referenced by BroadcastClient::~BroadcastClient().

92  {
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 }
Elem * find(const Elem &elem)
Definition: UniqueSet.h:60
int size(void) const
Definition: UniqueSet.h:58
UniqueSet< TaggedMsg > * taggedMsg
Definition: BroadcastMgr.h:83
UniqueSet< BroadcastClientElem > * broadcastSet
Definition: BroadcastMgr.h:82
int del(const Elem &elem)
Definition: UniqueSet.h:56

The documentation for this class was generated from the following files: