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