Merge remote branch 'origin/charmrun' into charmrun
[charm.git] / src / conv-ldb / cldb.none.c
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /*
9  a cldb which does nothing. Just send the messge locally if the destination 
10  processor is not specified.
11 */
12
13 #include "converse.h"
14 #include "queueing.h"
15 #include "cldb.h"
16 #include <stdlib.h>
17
18 void LoadNotifyFn(int l)
19 {
20 }
21
22 char *CldGetStrategy(void)
23 {
24   return "none";
25 }
26
27 void CldHandler(char *msg)
28 {
29   int len, queueing, priobits;
30   unsigned int *prioptr; CldInfoFn ifn; CldPackFn pfn;
31   CldRestoreHandler(msg);
32   ifn = (CldInfoFn)CmiHandlerToFunction(CmiGetInfo(msg));
33   ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
34   CsdEnqueueGeneral(msg, queueing, priobits, prioptr);
35 }
36
37 void CldEnqueueMulti(int npes, int *pes, void *msg, int infofn)
38 {
39   int len, queueing, priobits,i; unsigned int *prioptr;
40   CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
41   CldPackFn pfn;
42   ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
43   if (pfn) {
44     pfn(&msg);
45     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
46   }
47   CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
48   CmiSetInfo(msg,infofn);
49
50   /*
51   for(i=0;i<npes;i++) {
52     CmiSyncSend(pes[i], len, msg);
53   }
54   CmiFree(msg);
55   */
56
57   CmiSyncListSendAndFree(npes, pes, len, msg);
58 }
59
60 void CldEnqueue(int pe, void *msg, int infofn)
61 {
62   int len, queueing, priobits; unsigned int *prioptr;
63   CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
64   CldPackFn pfn;
65   if (pe == CLD_ANYWHERE) {
66     pe = CmiMyPe();
67   }
68   if (pe == CmiMyPe() && !CmiImmIsRunning()) {
69     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
70     /* CsdEnqueueGeneral is not thread or SIGIO safe */
71     CsdEnqueueGeneral(msg, queueing, priobits, prioptr);
72   } else {
73     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
74     if (pfn) {
75       pfn(&msg);
76       ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
77     }
78     CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
79     CmiSetInfo(msg,infofn);
80     if (pe==CLD_BROADCAST) { CmiSyncBroadcastAndFree(len, msg); }
81     else if (pe==CLD_BROADCAST_ALL) { CmiSyncBroadcastAllAndFree(len, msg); }
82     else CmiSyncSendAndFree(pe, len, msg);
83   }
84 }
85
86 void CldNodeEnqueue(int node, void *msg, int infofn)
87 {
88   int len, queueing, priobits; unsigned int *prioptr;
89   CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
90   CldPackFn pfn;
91   if (node == CLD_ANYWHERE) {
92     node = CmiMyNode();
93   }
94   if (node == CmiMyNode() && !CmiImmIsRunning()) {
95     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
96     CsdNodeEnqueueGeneral(msg, queueing, priobits, prioptr);
97   } else {
98     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
99     if (pfn) {
100       pfn(&msg);
101       ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
102     }
103     CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
104     CmiSetInfo(msg,infofn);
105     if (node==CLD_BROADCAST) { CmiSyncNodeBroadcastAndFree(len, msg); }
106     else if (node==CLD_BROADCAST_ALL){CmiSyncNodeBroadcastAllAndFree(len,msg);}
107     else CmiSyncNodeSendAndFree(node, len, msg);
108   }
109 }
110
111 void CldModuleInit(char **argv)
112 {
113   CpvInitialize(int, CldHandlerIndex);
114   CpvAccess(CldHandlerIndex) = CmiRegisterHandler((CmiHandler)CldHandler);
115   CpvInitialize(int, CldRelocatedMessages);
116   CpvInitialize(int, CldLoadBalanceMessages);
117   CpvInitialize(int, CldMessageChunks);
118   CpvAccess(CldRelocatedMessages) = CpvAccess(CldLoadBalanceMessages) = 
119     CpvAccess(CldMessageChunks) = 0;
120   CldModuleGeneralInit(argv);
121 }
122
123 void CldCallback(){}