doc: Add serial to list of ci file reserved words
[charm.git] / src / conv-core / conv-cpm.h
1 #ifndef _CONV_CPM_H
2 #define _CONV_CPM_H
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7
8 /* For CmiMsgHeaderSizeBytes */
9 #include "converse.h"
10
11 /************************************************************************
12  *
13  * CpmDestination
14  *
15  * A CpmDestination structure enables the user of the Cpm module to tell
16  * the parameter-marshalling system what kind of envelope to put int the
17  * message, and what to do with it after it has been filled.
18  *
19  ***********************************************************************/
20
21 typedef struct CpmDestinationStruct *CpmDestination;
22
23 typedef void *(*CpmSender)(CpmDestination, int, void *);
24
25 struct CpmDestinationStruct
26 {
27   CpmSender sendfn;
28   int envsize;
29 };
30
31 #define CpmPE(n) n
32 #define CpmALL (-1)
33 #define CpmOTHERS (-2)
34
35 CpmDestination CpmSend(int pe);
36 CpmDestination CpmMakeThread(int pe);
37 CpmDestination CpmMakeThreadSize(int pe, int size);
38 CpmDestination CpmEnqueueFIFO(int pe);
39 CpmDestination CpmEnqueueLIFO(int pe);
40 CpmDestination CpmEnqueueIFIFO(int pe, int prio);
41 CpmDestination CpmEnqueueILIFO(int pe, int prio);
42 CpmDestination CpmEnqueueBFIFO(int pe, int priobits, unsigned int *prioptr);
43 CpmDestination CpmEnqueueBLIFO(int pe, int priobits, unsigned int *prioptr);
44 CpmDestination CpmEnqueueLFIFO(int pe, int priobits, unsigned int *prioptr);
45 CpmDestination CpmEnqueueLLIFO(int pe, int priobits, unsigned int *prioptr);
46 CpmDestination CpmEnqueue(int pe,int qs,int priobits,unsigned int *prioptr);
47
48 /***********************************************************************
49  *
50  * CPM macros
51  *
52  *      CpmInvokable
53  *      CpmDeclareSimple(x)
54  *      CpmDeclarePointer(x)
55  *
56  * These macros expand into CPM ``declarations''.  The CPM ``declarations''
57  * are actually C code that has no effect, but when the CPM scanner sees
58  * them, it recognizes them and understands them as declarations.
59  *
60  **********************************************************************/
61
62 typedef void CpmInvokable;
63 typedef int CpmDeclareSimple1;
64 typedef int CpmDeclarePointer1;
65 #define CpmDeclareSimple(c) typedef CpmDeclareSimple1 CpmType_##c
66 #define CpmDeclarePointer(c) typedef CpmDeclarePointer1 CpmType_##c
67
68 /***********************************************************************
69  *
70  * Accessing a CPM message:
71  *
72  ***********************************************************************/
73
74 struct CpmHeader
75 {
76   char convcore[CmiMsgHeaderSizeBytes];
77   int envpos;
78 };
79 #define CpmEnv(msg) (((char *)msg)+(((struct CpmHeader *)msg)->envpos))
80 #define CpmAlign(val, type) ((val+sizeof(type)-1)&(~(sizeof(type)-1)))
81
82 /***********************************************************************
83  *
84  * Built-in CPM types
85  *
86  **********************************************************************/
87
88 CpmDeclareSimple(char);
89 #define CpmPack_char(v) do{}while(0)
90 #define CpmUnpack_char(v) do{}while(0)
91
92 CpmDeclareSimple(short);
93 #define CpmPack_short(v) do{}while(0)
94 #define CpmUnpack_short(v) do{}while(0)
95
96 CpmDeclareSimple(int);
97 #define CpmPack_int(v) do{}while(0)
98 #define CpmUnpack_int(v) do{}while(0)
99
100 CpmDeclareSimple(long);
101 #define CpmPack_long(v) do{}while(0)
102 #define CpmUnpack_long(v) do{}while(0)
103
104 CpmDeclareSimple(float);
105 #define CpmPack_float(v) do{}while(0)
106 #define CpmUnpack_float(v) do{}while(0)
107
108 CpmDeclareSimple(double);
109 #define CpmPack_double(v) do{}while(0)
110 #define CpmUnpack_double(v) do{}while(0)
111
112 typedef int CpmDim;
113 CpmDeclareSimple(CpmDim);
114 #define CpmPack_CpmDim(v) do{}while(0)
115 #define CpmUnpack_CpmDim(v) do{}while(0)
116
117 CpmDeclareSimple(Cfuture);
118 #define CpmPack_Cfuture(v) do{}while(0)
119 #define CpmUnpack_Cfuture(v) do{}while(0)
120
121 typedef char *CpmStr;
122 CpmDeclarePointer(CpmStr);
123 #define CpmPtrSize_CpmStr(v) (strlen(v)+1)
124 #define CpmPtrPack_CpmStr(p, v) (strcpy(p, v))
125 #define CpmPtrUnpack_CpmStr(v) do{}while(0)
126 #define CpmPtrFree_CpmStr(v) do{}while(0)
127
128 #ifdef __cplusplus
129 }
130 #endif
131
132 #endif