3es  0.7
3espacketreader.h
1 //
2 // author: Kazys Stepanas
3 //
4 #ifndef _3ESPACKETREADER_H_
5 #define _3ESPACKETREADER_H_
6 
7 #include "3es-core.h"
8 
9 #include "3espacketstream.h"
10 
11 namespace tes
12 {
18  class _3es_coreAPI PacketReader : public PacketStream<const PacketHeader>
19  {
20  public:
22  PacketReader(const PacketHeader &packet);
23 
29  bool checkCrc();
30 
32  CrcType calculateCrc() const;
33 
36  uint16_t bytesAvailable() const;
37 
48  size_t readElement(uint8_t *bytes, size_t elementSize);
49 
66  size_t readArray(uint8_t *bytes, size_t elementSize, size_t elementCount);
67 
78  size_t readRaw(uint8_t *bytes, size_t byteCount);
79 
84  template <typename T>
85  size_t readElement(T &element);
86 
87  template <typename T>
88  size_t readArray(T *elements, size_t elementCount);
89 
90  template <typename T>
91  PacketReader &operator >> (T &val);
92  };
93 
94  inline uint16_t PacketReader::bytesAvailable() const
95  {
96  return _packet.payloadSize - _payloadPosition;
97  }
98 
99  template <typename T>
100  inline size_t PacketReader::readElement(T &element)
101  {
102  return readElement(reinterpret_cast<uint8_t *>(&element), sizeof(T));
103  }
104 
105  template <typename T>
106  inline size_t PacketReader::readArray(T *elements, size_t elementCount)
107  {
108  return readArray(reinterpret_cast<uint8_t *>(elements), sizeof(T), elementCount);
109  }
110 
111  template <typename T>
112  inline PacketReader &PacketReader::operator >> (T &val)
113  {
114  int read = readElement(val);
115  _status |= !(read == sizeof(T)) * Fail;
116  return *this;
117  }
118 }
119 
120 #endif // _3ESPACKETREADER_H_
Definition: 3esbounds.h:13
A utility class used for managing read/write operations to a PacketHeader payload.
Definition: 3espacketstream.h:19
size_t readArray(uint8_t *bytes, size_t elementSize, size_t elementCount)
Reads an array of data items from the current position.
uint16_t bytesAvailable() const
Returns the number of bytes available for writing in the payload.
Definition: 3espacketreader.h:94
size_t readElement(uint8_t *bytes, size_t elementSize)
Reads a single data element from the current position.
The header for an incoming 3ES data packet.
Definition: 3espacketheader.h:32
uint16_t CrcType
Defies the packet CRC type.
Definition: 3espacketstream.h:23
A utility class for dealing with reading packets.
Definition: 3espacketreader.h:18