doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-com / MsgPacker.C
index 8d938a466f00e5185151878d60cf7586a5f18b21..6a662913f269764ad5743b99cf4b0e0e063ff5e4 100644 (file)
-#include "ComlibManager.h"
-#include "MsgPacker.h"
-#include "register.h"
+// #ifdef filippo
 
-CkpvExtern(int, RecvCombinedShortMsgHdlrIdx);
+// #include "MsgPacker.h"
 
-void short_envelope::pup(PUP::er &p){
-    p | idx;
-    p | epIdx;
-    p | size;
-    
-    if(p.isUnpacking()) 
-        data = new char[size];    
-    p(data, size);
-}
-
-short_envelope::short_envelope(){
-    epIdx = 0;
-    data = NULL;
-}
-
-short_envelope::~short_envelope(){
-    /*
-      if(data) 
-      delete [] data;        
-      data = NULL;
-    */
-}
-
-
-MsgPacker::MsgPacker(){
-    nShortMsgs = 0;
-    msgList = 0;    
-}
-
-MsgPacker::MsgPacker(CkQ<CharmMessageHolder *> &msgq, int n_msgs){
-
-    CkAssert(n_msgs < 65536);  //16 bit field for num messages
-
-    nShortMsgs = n_msgs;
-    msgList = new short_envelope[n_msgs];    
-
-    for(int count = 0; count < n_msgs; count ++){
-        CharmMessageHolder *cmsg = msgq.deq();
-        envelope *env = (envelope *)UsrToEnv(cmsg->getCharmMessage());
-        CkPackMessage(&env);
-
-        if(count == 0) {
-            aid = env->getsetArrayMgr();
-            if(aid.isZero()) CkAbort("Array packing set and ArrayID is zero");
-        }        
-        
-        msgList[count].epIdx = env->getsetArrayEp();
-        msgList[count].size = env->getTotalsize() - sizeof(envelope);
-        msgList[count].idx = env->getsetArrayIndex();
-        msgList[count].data = cmsg->getCharmMessage();
-
-        if(msgList[count].size > MAX_MESSAGE_SIZE)
-            CkAbort("Can't send messges larger than 64KB\n");
-
-        delete cmsg;
-    }
-}
-
-MsgPacker::~MsgPacker(){
-    if(nShortMsgs > 0 && msgList != NULL) {
-        for(int count = 0; count < nShortMsgs; count ++)
-            CkFreeMsg(msgList[count].data);        
-        
-        delete [] msgList;
-    }
-}
-
-void MsgPacker::getMessage(CombinedMessage *&cmb_msg, int &total_size){
-    int count;
-    PUP::sizer sp;
-    for(count = 0; count < nShortMsgs; count ++)
-        sp | msgList[count];
-
-    int size = sp.size();  
-    total_size = ALIGN8(sizeof(CombinedMessage)) + size;
-    
-    //CkPrintf("In MsgPacker with %d bytes and %d messages\n", total_size, 
-    //           nShortMsgs);
-
-    cmb_msg = (CombinedMessage *)CmiAlloc(total_size);
-
-    PUP::toMem mp((char *)cmb_msg + ALIGN8(sizeof(CombinedMessage)));
-    for(count = 0; count < nShortMsgs; count ++)
-        mp | msgList[count];
-
-    cmb_msg->aid = aid;
-    cmb_msg->srcPE = CkMyPe();
-    cmb_msg->nmsgs = nShortMsgs;
+// CkpvExtern(int, RecvCombinedShortMsgHdlrIdx);
 
-    CmiSetHandler(cmb_msg, CkpvAccess(RecvCombinedShortMsgHdlrIdx));
-}
+// MsgPacker::MsgPacker(){
+//     nShortMsgs = 0;
+//     msgList = 0;    
+// }
 
+// MsgPacker::MsgPacker(CkQ<CharmMessageHolder *> &msgq, int n_msgs){
 
-void MsgPacker::deliver(CombinedMessage *cmb_msg){
-    int nmsgs = cmb_msg->nmsgs;
+//     CkAssert(n_msgs < 65536);  //16 bit field for num messages
 
-    ComlibPrintf("In MsgPacker::deliver\n");
+//     nShortMsgs = n_msgs;
+//     msgList = new short_envelope[n_msgs];    
 
-    char *from_addr = (char *)cmb_msg + ALIGN8(sizeof(CombinedMessage));
-    PUP::fromMem fp(from_addr);
-    CkArrayID aid = cmb_msg->aid;
+//     for(int count = 0; count < n_msgs; count ++){
+//         CharmMessageHolder *cmsg = msgq.deq();
+//         char *msg = cmsg->getCharmMessage();
+//         envelope *env = (envelope *)UsrToEnv(msg);
+//         CkPackMessage(&env);
 
-    int src_pe = cmb_msg->srcPE;
-
-    for(int count = 0; count < nmsgs; count ++){
-        short_envelope senv;
-        fp | senv;
+//         if(count == 0) {
+//             aid = env->getsetArrayMgr();
+//             if(aid.isZero()) 
+//                 CkAbort("Array packing set and ArrayID is zero");
+//         }        
         
-        int ep = senv.epIdx;
-        CkArrayIndexMax idx = senv.idx;
-        int size = senv.size;
-
-        CProxyElement_ArrayBase ap(aid, idx);
-        ArrayElement *a_elem = ap.ckLocal();
-        CkArray *a=(CkArray *)_localBranch(aid);
-
-        int msgIdx = _entryTable[ep]->msgIdx;
-        if(_entryTable[ep]->noKeep && a_elem != NULL) {
-            //Unpack the message
-            senv.data = (char *)_msgTable[msgIdx]->unpack(senv.data); 
-            CkDeliverMessageReadonly(ep, senv.data, a_elem);            
-            delete[] senv.data;
-        }
-        else {
-            //envelope *env = (envelope *)CmiAlloc(sizeof(envelope) + size);
-            envelope *env = _allocEnv(ForArrayEltMsg, sizeof(envelope) + size);
-
-            void *data = EnvToUsr(env);
-            memcpy(data, senv.data, size);
-            
-            //Unpack the message
-            data = (char *)_msgTable[msgIdx]->unpack(data); 
-            
-            env->getsetArrayMgr() = aid;
-            env->getsetArrayIndex() = idx;
-            env->getsetArrayEp() = ep;
-            env->setPacked(0); 
-            env->getsetArraySrcPe()=src_pe;  
-            env->getsetArrayHops()=1;  
-            env->setQueueing(CK_QUEUEING_FIFO);            
-            env->setUsed(0);
-            env->setMsgIdx(msgIdx);
-
-            env->setTotalsize(sizeof(envelope) + size);
-
-            //if(a_elem)
-            //  CkDeliverMessageFree(ep, data, a_elem);                     
-            //else
-            //ap.ckSend((CkArrayMessage *)data, ep);
-            
-            a->deliver((CkArrayMessage *)data, CkDeliver_queue, CmiTrue);
-
-            delete[] senv.data;
-        }        
-    }      
+//         msgList[count].epIdx = env->getsetArrayEp();
+//         msgList[count].size = env->getTotalsize() - sizeof(envelope);
+//         msgList[count].idx = env->getsetArrayIndex();
+//         msgList[count].data = msg;
+
+//         CkAssert(msgList[count].size < MAX_MESSAGE_SIZE);
+//         delete cmsg;
+//     }
+// }
+
+// //Takes a queue of envelopes as char* ptrs and not charm message holders
+// //Used by mesh streaming strategy
+// MsgPacker::MsgPacker(CkQ<char *> &msgq, int n_msgs){
+    
+//     CkAssert(n_msgs < 65536);  //16 bit field for num messages
+    
+//     nShortMsgs = n_msgs;
+//     msgList = new short_envelope[n_msgs];    
+    
+//     for(int count = 0; count < n_msgs; count ++){
+//         envelope *env = (envelope *)msgq.deq();
+//         char *msg = (char *)EnvToUsr(env);
+//         CkPackMessage(&env);
+
+//         if(count == 0) {
+//             aid = env->getsetArrayMgr();
+//             if(aid.isZero()) 
+//                 CkAbort("Array packing set and ArrayID is zero");
+//         }        
         
-    CmiFree(cmb_msg);
-}
+//         msgList[count].epIdx = env->getsetArrayEp();
+//         msgList[count].size = env->getTotalsize() - sizeof(envelope);
+//         msgList[count].idx = env->getsetArrayIndex();
+//         msgList[count].data = msg;
+        
+//         CkAssert(msgList[count].size < MAX_MESSAGE_SIZE);
+//     }
+// }
+
+// MsgPacker::~MsgPacker(){
+//     if(nShortMsgs > 0 && msgList != NULL) {
+//         for(int count = 0; count < nShortMsgs; count ++)
+//             CkFreeMsg(msgList[count].data);        
+        
+//         delete [] msgList;
+//     }
+// }
+
+// void MsgPacker::getMessage(CombinedMessage *&cmb_msg, int &total_size){
+//     int count;
+//     PUP_cmiAllocSizer sp;
+
+//     CombinedMessage cmb_hdr;
+//     cmb_hdr.aid = aid;
+//     cmb_hdr.srcPE = CkMyPe();
+//     cmb_hdr.nmsgs = nShortMsgs;
+
+//     sp | cmb_hdr;
+//     for(count = 0; count < nShortMsgs; count ++)
+//         sp | msgList[count];
+    
+//     total_size = sp.size();
+//     ComlibPrintf("In MsgPacker with %d bytes and %d messages\n", total_size, 
+//                  nShortMsgs);
 
+//     cmb_msg = (CombinedMessage *)CmiAlloc(sp.size());
 
+//     PUP_toCmiAllocMem mp(cmb_msg);
+//     mp | cmb_hdr;
 
+//     for(count = 0; count < nShortMsgs; count ++)
+//         mp | msgList[count];
 
+//     CmiSetHandler(cmb_msg, CkpvAccess(RecvCombinedShortMsgHdlrIdx));
+// }
 
+// #endif