blob: fcf799ba23214d691c621063ba4f766863f5cc76 [file] [log] [blame]
anjana_sreekumar@infosys.com991c2062020-01-08 11:42:57 +05301/*
2 * MsgBuffer.h
3 *
4 * Created on: Feb 13, 2011
5 * Author: hariharanb
6 */
7
8#ifndef MSGBUFFER_H_
9#define MSGBUFFER_H_
10
11#include <sstream>
12#include <debug.h>
13
14#include <stdint.h>
15
16#define DEFAULT_BUFF_SIZE 1024
17
18using namespace std;
19extern cmn::utils::Debug errorStream;
20namespace cmn
21{
22namespace utils
23{
24class MsgBuffer
25{
26public:
27
28 MsgBuffer();
29 MsgBuffer(uint16_t size);
30
31 ~MsgBuffer();
32
33
34 bool writeBits(uint8_t data, uint8_t size, bool append = true);
35 bool writeBytes(uint8_t* data, uint16_t size, bool append = true);
36 bool writeUint8(uint8_t data, bool append = true);
37 bool writeUint16(uint16_t data, bool append = true);
38 bool writeUint32(uint32_t data, bool append = true);
39 bool writeUint64(uint64_t data, bool append = true);
40
41 void display (Debug &stream);
42
43 uint8_t readBits(uint16_t size);
44 bool readBytes(uint8_t* data, uint16_t size);
45
46 bool readBit();
47 void readUint8(uint8_t &data);
48 bool readUint16(uint16_t &data);
49 bool readUint32(uint32_t &data);
50 bool readUint64(uint64_t &data);
51 void reset();
52 void rewind();
53 void goToEnd();
54 void skipBits(uint8_t size);
55 void skipBytes(uint16_t size);
56 uint16_t getLength();
57 uint16_t getBufferSize();
58 uint16_t getCurrentIndex();
59 void goToIndex(uint16_t idx);
60
61 uint8_t charToHex(uint8_t x);
62 uint16_t lengthLeft();
63 uint16_t sizeLeft();
64
65 void* getDataPointer();
66 void setLength(uint16_t bufLen);
67
68private:
69
70 uint8_t* data_mp;
71 uint16_t bufSize;
72 uint16_t length;
73 uint16_t bitLength;
74 uint16_t byteIndex;
75 uint16_t bitIndex;
76
77 void initialize(uint16_t size);
78 bool incrBitIndex(uint8_t size);
79 bool incrByteIndex(uint16_t size);
80 void nextByte();
81};
82};
83};
84
85using namespace cmn::utils;
86
87#endif /* MSGBUFFER_H_ */
88