NAMD
MStream.h
Go to the documentation of this file.
1 
7 #ifndef MSTREAM_H
8 #define MSTREAM_H
9 
10 #include "Vector.h"
11 #include <string.h>
12 
13 class StreamMessage;
14 class Communicate;
15 
16 class MIStream {
17  private:
18  int PE, tag;
19  StreamMessage *msg;
20  size_t currentPos;
21  int currentIndex;
22  StreamMessage *early;
23  Communicate *cobj;
24  unsigned int checksum;
25  MIStream *Get(char *buf, size_t len); // get len bytes from message to buf
26  public:
27  MIStream(Communicate *c, int pe, int tag);
28  ~MIStream();
29  MIStream *get(char &data) {
30  return Get(&data,sizeof(char));
31  }
32  MIStream *get(unsigned char &data) {
33  return Get((char *)&data,sizeof(unsigned char));
34  }
35  MIStream *get(short &data) {
36  return Get((char *)&data, sizeof(short));
37  }
38  MIStream *get(unsigned short &data) {
39  return Get((char *)&data, sizeof(unsigned short));
40  }
41  MIStream *get(int &data) {
42  return Get((char *)&data, sizeof(int));
43  }
44  MIStream *get(unsigned int &data) {
45  return Get((char *)&data, sizeof(unsigned int));
46  }
47  MIStream *get(long &data) {
48  return Get((char *)&data, sizeof(long));
49  }
50  MIStream *get(unsigned long &data) {
51  return Get((char *)&data, sizeof(unsigned long));
52  }
53  MIStream *get(float &data) {
54  return Get((char *)&data, sizeof(float));
55  }
56  MIStream *get(double &data) {
57  return Get((char *)&data, sizeof(double));
58  }
59  MIStream *get(size_t len, char *data) {
60  return Get(data,len*sizeof(char));
61  }
62  MIStream *get(size_t len, unsigned char *data) {
63  return Get((char *)data,len*sizeof(unsigned char));
64  }
65  MIStream *get(size_t len, short *data) {
66  return Get((char *)data,len*sizeof(short));
67  }
68  MIStream *get(size_t len, unsigned short *data) {
69  return Get((char *)data,len*sizeof(unsigned short));
70  }
71  MIStream *get(size_t len, int *data) {
72  return Get((char *)data,len*sizeof(int));
73  }
74  MIStream *get(size_t len, unsigned int *data) {
75  return Get((char *)data,len*sizeof(unsigned int));
76  }
77  MIStream *get(size_t len, long *data) {
78  return Get((char *)data,len*sizeof(long));
79  }
80  MIStream *get(size_t len, unsigned long *data) {
81  return Get((char *)data,len*sizeof(unsigned long));
82  }
83  MIStream *get(size_t len, float *data) {
84  return Get((char *)data,len*sizeof(float));
85  }
86  MIStream *get(size_t len, double *data) {
87  return Get((char *)data,len*sizeof(double));
88  }
89  MIStream *get(size_t len, Vector *data) {
90  return Get((char *)data, len*sizeof(Vector));
91  }
92  MIStream *get(Vector *data) {
93  return Get((char *)data, sizeof(Vector));
94  }
95  template <class T>
96  MIStream *get(size_t len, T *data) {
97  return Get((char *)data, len*sizeof(T));
98  }
99 };
100 
101 class MOStream {
102  private:
103  int PE, tag;
104  unsigned int bufLen;
105  StreamMessage *msgBuf;
106  Communicate *cobj;
107  MOStream *Put(char *buf, size_t len); // put len bytes from buf into message
108  public:
109  MOStream(Communicate *c, int pe, int tag, size_t bufSize);
110  ~MOStream();
111  void end(void);
112  MOStream *put(char data) {
113  return Put(&data,sizeof(char));
114  }
115  MOStream *put(unsigned char data) {
116  return Put((char *)&data,sizeof(unsigned char));
117  }
118  MOStream *put(short data) {
119  return Put((char *)&data, sizeof(short));
120  }
121  MOStream *put(unsigned short data) {
122  return Put((char *)&data, sizeof(unsigned short));
123  }
124  MOStream *put(int data) {
125  return Put((char *)&data, sizeof(int));
126  }
127  MOStream *put(unsigned int data) {
128  return Put((char *)&data, sizeof(unsigned int));
129  }
130  MOStream *put(long data) {
131  return Put((char *)&data, sizeof(long));
132  }
133  MOStream *put(unsigned long data) {
134  return Put((char *)&data, sizeof(unsigned long));
135  }
136  MOStream *put(float data) {
137  return Put((char *)&data, sizeof(float));
138  }
139  MOStream *put(double data) {
140  return Put((char *)&data, sizeof(double));
141  }
142  MOStream *put(size_t len, char *data) {
143  return Put(data,len*sizeof(char));
144  }
145  MOStream *put(size_t len, unsigned char *data) {
146  return Put((char *)data,len*sizeof(unsigned char));
147  }
148  MOStream *put(size_t len, short *data) {
149  return Put((char *)data,len*sizeof(short));
150  }
151  MOStream *put(size_t len, unsigned short *data) {
152  return Put((char *)data,len*sizeof(unsigned short));
153  }
154  MOStream *put(size_t len, int *data) {
155  return Put((char *)data,len*sizeof(int));
156  }
157  MOStream *put(size_t len, unsigned int *data) {
158  return Put((char *)data,len*sizeof(unsigned int));
159  }
160  MOStream *put(size_t len, long *data) {
161  return Put((char *)data,len*sizeof(long));
162  }
163  MOStream *put(size_t len, unsigned long *data) {
164  return Put((char *)data,len*sizeof(unsigned long));
165  }
166  MOStream *put(size_t len, float *data) {
167  return Put((char *)data,len*sizeof(float));
168  }
169  MOStream *put(size_t len, double *data) {
170  return Put((char *)data,len*sizeof(double));
171  }
172  MOStream *put(Vector *data) {
173  return Put((char *)data,sizeof(Vector));
174  }
175  MOStream *put(size_t len, Vector *data) {
176  return Put((char *)data,len*sizeof(Vector));
177  }
178  MOStream *put(char *data) {
179  size_t length = strlen(data);
180  put((int)length);
181  return put(length, data);
182  }
183  template <class T>
184  MOStream *put(size_t len, T *data) {
185  return Put((char *)data,len*sizeof(T));
186  }
187 };
188 
189 #endif
~MIStream()
Definition: MStream.C:38
MOStream * put(unsigned char data)
Definition: MStream.h:115
MOStream * put(double data)
Definition: MStream.h:139
void end(void)
Definition: MStream.C:176
MOStream * put(size_t len, unsigned char *data)
Definition: MStream.h:145
MOStream * put(size_t len, unsigned long *data)
Definition: MStream.h:163
Definition: Vector.h:64
MOStream * put(unsigned short data)
Definition: MStream.h:121
MOStream * put(size_t len, float *data)
Definition: MStream.h:166
MOStream * put(size_t len, T *data)
Definition: MStream.h:184
MOStream * put(size_t len, int *data)
Definition: MStream.h:154
MOStream * put(size_t len, long *data)
Definition: MStream.h:160
MOStream * put(short data)
Definition: MStream.h:118
MOStream * put(size_t len, unsigned int *data)
Definition: MStream.h:157
MOStream * put(float data)
Definition: MStream.h:136
MIStream(Communicate *c, int pe, int tag)
Definition: MStream.C:27
MOStream * put(size_t len, Vector *data)
Definition: MStream.h:175
MOStream(Communicate *c, int pe, int tag, size_t bufSize)
Definition: MStream.C:44
MOStream * put(unsigned int data)
Definition: MStream.h:127
MOStream * put(size_t len, short *data)
Definition: MStream.h:148
~MOStream()
Definition: MStream.C:59
MOStream * put(char *data)
Definition: MStream.h:178
MOStream * put(size_t len, unsigned short *data)
Definition: MStream.h:151
MOStream * put(size_t len, char *data)
Definition: MStream.h:142
MOStream * put(long data)
Definition: MStream.h:130
MOStream * put(size_t len, double *data)
Definition: MStream.h:169
MOStream * put(Vector *data)
Definition: MStream.h:172
MOStream * put(char data)
Definition: MStream.h:112
MOStream * put(int data)
Definition: MStream.h:124
MOStream * put(unsigned long data)
Definition: MStream.h:133