Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

ProxyResultVarsizeMsg Class Reference

#include <ProxyMgr.h>

List of all members.

Static Public Member Functions

ProxyResultVarsizeMsggetANewMsg (NodeID nid, PatchID pid, int prioSize, ForceList *fls)

Public Attributes

NodeID node
PatchID patch
int flLen [Results::maxNumForces]
ForceforceArr
char * isZero
char padding [(8-(sizeof(envelope)+sizeof(NodeID)+sizeof(PatchID)+sizeof(int)*Results::maxNumForces+2 *sizeof(void *))%8)%8]


Member Function Documentation

ProxyResultVarsizeMsg * ProxyResultVarsizeMsg::getANewMsg NodeID  nid,
PatchID  pid,
int  prioSize,
ForceList fls
[static]
 

Definition at line 144 of file ProxyMgr.C.

References ResizeArray< Elem >::begin(), flLen, Force, forceArr, ForceList, isZero, j, node, patch, ResizeArray< Elem >::size(), Vector::x, Vector::y, and Vector::z.

00144                                                                                                              {
00145 
00146     //1. decide the length of forceArr and iszero field.
00147     int tmpLen[Results::maxNumForces];
00148     int iszeroLen = 0;
00149     for (int i=0; i<Results::maxNumForces; i++){
00150         tmpLen[i] = fls[i].size();
00151         iszeroLen += tmpLen[i];
00152     }
00153     char *tmpIszero = new char[iszeroLen];
00154     char *iszeroPtr = tmpIszero;
00155     int fArrLen = 0;
00156     for(int i=0; i<Results::maxNumForces; i++) {        
00157         Force *fiPtr = fls[i].begin();
00158         for(int j=0; j<tmpLen[i]; j++, fiPtr++, iszeroPtr++) {         
00159             if(fiPtr->x!=0.0 || fiPtr->y!=0.0 || fiPtr->z!=0) {
00160                 *iszeroPtr=0;
00161                 fArrLen++;
00162             }else{
00163                 *iszeroPtr=1;
00164             }            
00165         }
00166     }
00167 
00168     //2. Ready to create the msg, and set all fields
00169     ProxyResultVarsizeMsg *retmsg = new(fArrLen, iszeroLen, prioSize)ProxyResultVarsizeMsg;
00170     retmsg->node = nid;
00171     retmsg->patch = pid;
00172     memcpy(retmsg->flLen, tmpLen, sizeof(int)*Results::maxNumForces);
00173     iszeroPtr = tmpIszero;
00174     Force *forcePtr = retmsg->forceArr;
00175     for(int i=0; i<Results::maxNumForces; i++) {        
00176         Force *fiPtr = fls[i].begin();
00177         for(int j=0; j<tmpLen[i]; j++, fiPtr++, iszeroPtr++) {
00178             if((*iszeroPtr)!=1) {
00179                 forcePtr->x = fiPtr->x;
00180                 forcePtr->y = fiPtr->y;
00181                 forcePtr->z = fiPtr->z;
00182                 forcePtr++;
00183             }            
00184         }
00185     }
00186     memcpy(retmsg->isZero, tmpIszero, sizeof(char)*iszeroLen);
00187     delete [] tmpIszero;
00188     return retmsg;
00189 }


Member Data Documentation

int ProxyResultVarsizeMsg::flLen[Results::maxNumForces]
 

Definition at line 148 of file ProxyMgr.h.

Referenced by getANewMsg(), and HomePatch::receiveResults().

Force* ProxyResultVarsizeMsg::forceArr
 

Definition at line 150 of file ProxyMgr.h.

Referenced by getANewMsg(), and HomePatch::receiveResults().

char* ProxyResultVarsizeMsg::isZero
 

Definition at line 153 of file ProxyMgr.h.

Referenced by getANewMsg(), and HomePatch::receiveResults().

NodeID ProxyResultVarsizeMsg::node
 

Definition at line 146 of file ProxyMgr.h.

Referenced by getANewMsg(), and HomePatch::receiveResults().

char ProxyResultVarsizeMsg::padding[(8-(sizeof(envelope)+sizeof(NodeID)+sizeof(PatchID)+sizeof(int)*Results::maxNumForces+2 *sizeof(void *))%8)%8]
 

Definition at line 159 of file ProxyMgr.h.

PatchID ProxyResultVarsizeMsg::patch
 

Definition at line 147 of file ProxyMgr.h.

Referenced by getANewMsg(), ProxyMgr::recvResults(), and ProxyMgr::sendResults().


The documentation for this class was generated from the following files:
Generated on Tue Nov 24 04:07:51 2009 for NAMD by  doxygen 1.3.9.1