MCPcopy Create free account
hub / github.com/BirolLab/abyss / receiveBufferedMessage

Method receiveBufferedMessage

Parallel/CommLayer.cpp:208–273  ·  view source on GitHub ↗

Receive a buffered message. */

Source from the content-addressed store, hash-verified

206
207/** Receive a buffered message. */
208void CommLayer::receiveBufferedMessage(MessagePtrVector& outmessages)
209{
210 assert(outmessages.empty());
211 int flag;
212 MPI_Status status;
213 MPI_Test(&m_request, &flag, &status);
214 assert(flag);
215 assert((APMessage)status.MPI_TAG == APM_BUFFERED);
216
217 int size;
218 MPI_Get_count(&status, MPI_BYTE, &size);
219
220 int offset = 0;
221 while (offset < size) {
222 MessageType type = Message::readMessageType(
223 (char*)m_rxBuffer + offset);
224
225 Message* pNewMessage;
226 switch(type)
227 {
228 case MT_ADD:
229 pNewMessage = new SeqAddMessage();
230 break;
231 case MT_REMOVE:
232 pNewMessage = new SeqRemoveMessage();
233 break;
234 case MT_SET_FLAG:
235 pNewMessage = new SetFlagMessage();
236 break;
237 case MT_REMOVE_EXT:
238 pNewMessage = new RemoveExtensionMessage();
239 break;
240 case MT_SEQ_DATA_REQUEST:
241 pNewMessage = new SeqDataRequest();
242 break;
243 case MT_SEQ_DATA_RESPONSE:
244 pNewMessage = new SeqDataResponse();
245 break;
246 case MT_SET_BASE:
247 pNewMessage = new SetBaseMessage();
248 break;
249 default:
250 pNewMessage = new SeqDataRequest();
251 assert(false);
252 break;
253 }
254
255 // Unserialize the new message from the buffer
256 offset += pNewMessage->unserialize(
257 (char*)m_rxBuffer + offset);
258
259 // Constructed message will be deleted in the
260 // NetworkSequenceCollection calling function.
261 outmessages.push_back(pNewMessage);
262 }
263 assert(offset == size);
264
265 assert(m_request == MPI_REQUEST_NULL);

Callers 1

pumpNetworkMethod · 0.80

Calls 4

emptyMethod · 0.45
unserializeMethod · 0.45
push_backMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected