Merge nodehelper lib and example codes into charm
[charm.git] / src / ck-com / MsgPacker.C
1 // #ifdef filippo
2
3 // #include "MsgPacker.h"
4
5 // CkpvExtern(int, RecvCombinedShortMsgHdlrIdx);
6
7 // MsgPacker::MsgPacker(){
8 //     nShortMsgs = 0;
9 //     msgList = 0;    
10 // }
11
12 // MsgPacker::MsgPacker(CkQ<CharmMessageHolder *> &msgq, int n_msgs){
13
14 //     CkAssert(n_msgs < 65536);  //16 bit field for num messages
15
16 //     nShortMsgs = n_msgs;
17 //     msgList = new short_envelope[n_msgs];    
18
19 //     for(int count = 0; count < n_msgs; count ++){
20 //         CharmMessageHolder *cmsg = msgq.deq();
21 //         char *msg = cmsg->getCharmMessage();
22 //         envelope *env = (envelope *)UsrToEnv(msg);
23 //         CkPackMessage(&env);
24
25 //         if(count == 0) {
26 //             aid = env->getsetArrayMgr();
27 //             if(aid.isZero()) 
28 //                 CkAbort("Array packing set and ArrayID is zero");
29 //         }        
30         
31 //         msgList[count].epIdx = env->getsetArrayEp();
32 //         msgList[count].size = env->getTotalsize() - sizeof(envelope);
33 //         msgList[count].idx = env->getsetArrayIndex();
34 //         msgList[count].data = msg;
35
36 //         CkAssert(msgList[count].size < MAX_MESSAGE_SIZE);
37 //         delete cmsg;
38 //     }
39 // }
40
41 // //Takes a queue of envelopes as char* ptrs and not charm message holders
42 // //Used by mesh streaming strategy
43 // MsgPacker::MsgPacker(CkQ<char *> &msgq, int n_msgs){
44     
45 //     CkAssert(n_msgs < 65536);  //16 bit field for num messages
46     
47 //     nShortMsgs = n_msgs;
48 //     msgList = new short_envelope[n_msgs];    
49     
50 //     for(int count = 0; count < n_msgs; count ++){
51 //         envelope *env = (envelope *)msgq.deq();
52 //         char *msg = (char *)EnvToUsr(env);
53 //         CkPackMessage(&env);
54
55 //         if(count == 0) {
56 //             aid = env->getsetArrayMgr();
57 //             if(aid.isZero()) 
58 //                 CkAbort("Array packing set and ArrayID is zero");
59 //         }        
60         
61 //         msgList[count].epIdx = env->getsetArrayEp();
62 //         msgList[count].size = env->getTotalsize() - sizeof(envelope);
63 //         msgList[count].idx = env->getsetArrayIndex();
64 //         msgList[count].data = msg;
65         
66 //         CkAssert(msgList[count].size < MAX_MESSAGE_SIZE);
67 //     }
68 // }
69
70 // MsgPacker::~MsgPacker(){
71 //     if(nShortMsgs > 0 && msgList != NULL) {
72 //         for(int count = 0; count < nShortMsgs; count ++)
73 //             CkFreeMsg(msgList[count].data);        
74         
75 //         delete [] msgList;
76 //     }
77 // }
78
79 // void MsgPacker::getMessage(CombinedMessage *&cmb_msg, int &total_size){
80 //     int count;
81 //     PUP_cmiAllocSizer sp;
82
83 //     CombinedMessage cmb_hdr;
84 //     cmb_hdr.aid = aid;
85 //     cmb_hdr.srcPE = CkMyPe();
86 //     cmb_hdr.nmsgs = nShortMsgs;
87
88 //     sp | cmb_hdr;
89 //     for(count = 0; count < nShortMsgs; count ++)
90 //         sp | msgList[count];
91     
92 //     total_size = sp.size();
93 //     ComlibPrintf("In MsgPacker with %d bytes and %d messages\n", total_size, 
94 //                  nShortMsgs);
95
96 //     cmb_msg = (CombinedMessage *)CmiAlloc(sp.size());
97
98 //     PUP_toCmiAllocMem mp(cmb_msg);
99 //     mp | cmb_hdr;
100
101 //     for(count = 0; count < nShortMsgs; count ++)
102 //         mp | msgList[count];
103
104 //     CmiSetHandler(cmb_msg, CkpvAccess(RecvCombinedShortMsgHdlrIdx));
105 // }
106
107 // #endif