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 133 of file ProxyMgr.C.

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

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


Member Data Documentation

int ProxyResultVarsizeMsg::flLen[Results::maxNumForces]
 

Definition at line 120 of file ProxyMgr.h.

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

Force* ProxyResultVarsizeMsg::forceArr
 

Definition at line 122 of file ProxyMgr.h.

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

char* ProxyResultVarsizeMsg::isZero
 

Definition at line 125 of file ProxyMgr.h.

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

NodeID ProxyResultVarsizeMsg::node
 

Definition at line 118 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 131 of file ProxyMgr.h.

PatchID ProxyResultVarsizeMsg::patch
 

Definition at line 119 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 Fri Sep 5 04:07:19 2008 for NAMD by  doxygen 1.3.9.1