fixed a compiler warning
[charm.git] / src / langs / streams / MStream.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 #ifndef MSTREAM_H
9 #define MSTREAM_H
10
11 struct StreamMessage {
12   char header[CmiMsgHeaderSizeBytes];
13   int PE;
14   int tag;
15   unsigned short len; // sizeof the data 
16   unsigned short isLast; // 1 if its last packet
17   char data[1];
18 };
19
20 class Communicate;
21
22 class MIStream {
23   private:
24     int PE, tag;
25     StreamMessage *msg;
26     int currentPos;
27     Communicate *cobj;
28     MIStream *Get(char *buf, int len);  // get len bytes from message to buf
29   public:
30     MIStream(Communicate *c, int pe, int tag);
31     ~MIStream();
32     MIStream *get(char &data) { 
33       return Get(&data,sizeof(char)); 
34     }
35     MIStream *get(unsigned char &data) { 
36       return Get((char *)&data,sizeof(unsigned char)); 
37     }
38     MIStream *get(short &data) { 
39       return Get((char *)&data, sizeof(short)); 
40     }
41     MIStream *get(unsigned short &data) { 
42       return Get((char *)&data, sizeof(unsigned short)); 
43     }
44     MIStream *get(int &data) { 
45       return Get((char *)&data, sizeof(int)); 
46     }
47     MIStream *get(unsigned int &data) { 
48       return Get((char *)&data, sizeof(unsigned int)); 
49     }
50     MIStream *get(long &data) { 
51       return Get((char *)&data, sizeof(long)); 
52     }
53     MIStream *get(unsigned long &data) { 
54       return Get((char *)&data, sizeof(unsigned long)); 
55     }
56     MIStream *get(float &data) { 
57       return Get((char *)&data, sizeof(float)); 
58     }
59     MIStream *get(double &data) { 
60       return Get((char *)&data, sizeof(double)); 
61     }
62     MIStream *get(int len, char *data) { 
63       return Get(data,len*sizeof(char)); 
64     }
65     MIStream *get(int len, unsigned char *data) { 
66       return Get((char *)data,len*sizeof(unsigned char)); 
67     }
68     MIStream *get(int len, short *data) { 
69       return Get((char *)data,len*sizeof(short)); 
70     }
71     MIStream *get(int len, unsigned short *data) { 
72       return Get((char *)data,len*sizeof(unsigned short)); 
73     }
74     MIStream *get(int len, int *data) { 
75       return Get((char *)data,len*sizeof(int)); 
76     }
77     MIStream *get(int len, unsigned int *data) { 
78       return Get((char *)data,len*sizeof(unsigned int)); 
79     }
80     MIStream *get(int len, long *data) { 
81       return Get((char *)data,len*sizeof(long)); 
82     }
83     MIStream *get(int len, unsigned long *data) { 
84       return Get((char *)data,len*sizeof(unsigned long)); 
85     }
86     MIStream *get(int len, float *data) { 
87       return Get((char *)data,len*sizeof(float)); 
88     }
89     MIStream *get(int len, double *data) { 
90       return Get((char *)data,len*sizeof(double)); 
91     }
92 };
93
94 class MOStream {
95   private:
96     int PE, tag;
97     unsigned int bufLen;
98     StreamMessage *msgBuf;
99     Communicate *cobj;
100     MOStream *Put(char *buf, int len);  // put len bytes from buf into message
101   public:
102     MOStream(Communicate *c, int pe, int tag, unsigned int bufSize);
103     ~MOStream();
104     void end(void);
105     MOStream *put(char data) { 
106       return Put(&data,sizeof(char)); 
107     }
108     MOStream *put(unsigned char data) { 
109       return Put((char *)&data,sizeof(unsigned char)); 
110     }
111     MOStream *put(short data) { 
112       return Put((char *)&data, sizeof(short)); 
113     }
114     MOStream *put(unsigned short data) { 
115       return Put((char *)&data, sizeof(unsigned short)); 
116     }
117     MOStream *put(int data) { 
118       return Put((char *)&data, sizeof(int)); 
119     }
120     MOStream *put(unsigned int data) { 
121       return Put((char *)&data, sizeof(unsigned int)); 
122     }
123     MOStream *put(long data) { 
124       return Put((char *)&data, sizeof(long)); 
125     }
126     MOStream *put(unsigned long data) { 
127       return Put((char *)&data, sizeof(unsigned long)); 
128     }
129     MOStream *put(float data) { 
130       return Put((char *)&data, sizeof(float)); 
131     }
132     MOStream *put(double data) { 
133       return Put((char *)&data, sizeof(double)); 
134     }
135     MOStream *put(int len, char *data) { 
136       return Put(data,len*sizeof(char)); 
137     }
138     MOStream *put(int len, unsigned char *data) { 
139       return Put((char *)data,len*sizeof(unsigned char)); 
140     }
141     MOStream *put(int len, short *data) { 
142       return Put((char *)data,len*sizeof(short)); 
143     }
144     MOStream *put(int len, unsigned short *data) { 
145       return Put((char *)data,len*sizeof(unsigned short)); 
146     }
147     MOStream *put(int len, int *data) { 
148       return Put((char *)data,len*sizeof(int)); 
149     }
150     MOStream *put(int len, unsigned int *data) { 
151       return Put((char *)data,len*sizeof(unsigned int)); 
152     }
153     MOStream *put(int len, long *data) { 
154       return Put((char *)data,len*sizeof(long)); 
155     }
156     MOStream *put(int len, unsigned long *data) { 
157       return Put((char *)data,len*sizeof(unsigned long)); 
158     }
159     MOStream *put(int len, float *data) { 
160       return Put((char *)data,len*sizeof(float)); 
161     }
162     MOStream *put(int len, double *data) { 
163       return Put((char *)data,len*sizeof(double)); 
164     }
165 };
166
167 #endif