CPN
Computational Process Networks
Public Member Functions | Protected Member Functions | List of all members
CPN::PacketEncoder Class Referenceabstract

#include <PacketEncoder.h>

+ Inheritance diagram for CPN::PacketEncoder:

Public Member Functions

 PacketEncoder ()
 
virtual ~PacketEncoder ()
 
template<typename Queue_t >
void SendEnqueue (const Packet &packet, Queue_t &queue)
 
void SendPacket (const Packet &packet)
 
void SendPacket (const Packet &packet, void *data)
 

Protected Member Functions

virtual void WriteBytes (const iovec *iov, unsigned iovcnt)=0
 

Detailed Description

Take the various message types that can be sent over the wire and encode them into byte representation.

Definition at line 38 of file PacketEncoder.h.

Constructor & Destructor Documentation

CPN::PacketEncoder::PacketEncoder ( )

Definition at line 28 of file PacketEncoder.cc.

28 {}
CPN::PacketEncoder::~PacketEncoder ( )
virtual

Definition at line 30 of file PacketEncoder.cc.

30 {}

Member Function Documentation

template<typename Queue_t >
void CPN::PacketEncoder::SendEnqueue ( const Packet packet,
Queue_t &  queue 
)
inline

Definition at line 44 of file PacketEncoder.h.

References ASSERT, CPN::Packet::Count(), CPN::Packet::header, CPN::PACKET_ENQUEUE, and CPN::Packet::Type().

44  {
45  ASSERT(packet.Type() == PACKET_ENQUEUE);
46  std::vector<iovec> iovs;
47  // Must use const_cast here because iovec.iov_base isn't const... :(
48  iovec header = { const_cast<PacketHeader*>(&packet.header), sizeof(packet.header) };
49  iovs.push_back(header);
50  for (unsigned i = 0; i < queue.NumChannels(); ++i) {
51  iovec iov;
52  iov.iov_base = const_cast<void*>(queue.GetRawDequeuePtr(packet.Count(), i));
53  ASSERT(iov.iov_base);
54  iov.iov_len = packet.Count();
55  iovs.push_back(iov);
56  }
57  WriteBytes(&iovs[0], iovs.size());
58  queue.Dequeue(packet.Count());
59  }
virtual void WriteBytes(const iovec *iov, unsigned iovcnt)=0
#define ASSERT(exp,...)

+ Here is the call graph for this function:

void CPN::PacketEncoder::SendPacket ( const Packet packet)

Definition at line 32 of file PacketEncoder.cc.

References CPN::Packet::header, and WriteBytes().

Referenced by CPN::RemoteQueue::SendD4RTagPacket(), CPN::RemoteQueue::SendDequeuePacket(), CPN::RemoteQueue::SendEndOfReadPacket(), CPN::RemoteQueue::SendEndOfWritePacket(), CPN::RemoteQueue::SendFlushPacket(), CPN::RemoteQueue::SendGrowPacket(), CPN::RemoteQueue::SendReadBlockPacket(), CPN::RemoteQueue::SendResetPacket(), and CPN::RemoteQueue::SendWriteBlockPacket().

32  {
33  iovec iov;
34  iov.iov_base = const_cast<PacketHeader*>(&packet.header);
35  iov.iov_len = sizeof(packet.header);
36  WriteBytes(&iov, 1);
37  }
virtual void WriteBytes(const iovec *iov, unsigned iovcnt)=0

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::PacketEncoder::SendPacket ( const Packet packet,
void *  data 
)

Definition at line 39 of file PacketEncoder.cc.

References ASSERT, CPN::Packet::DataLength(), CPN::Packet::header, and WriteBytes().

39  {
40  ASSERT(data);
41  iovec iov[2];
42  iov[0].iov_base = const_cast<PacketHeader*>(&packet.header);
43  iov[0].iov_len = sizeof(packet.header);
44  iov[1].iov_base = data;
45  iov[1].iov_len = packet.DataLength();
46  WriteBytes(&iov[0], 2);
47  }
virtual void WriteBytes(const iovec *iov, unsigned iovcnt)=0
#define ASSERT(exp,...)

+ Here is the call graph for this function:

virtual void CPN::PacketEncoder::WriteBytes ( const iovec *  iov,
unsigned  iovcnt 
)
protectedpure virtual

Implemented in CPN::RemoteQueue.

Referenced by SendPacket().

+ Here is the caller graph for this function:


The documentation for this class was generated from the following files: