Dynalib Utils
DynaBuffer.h
Go to the documentation of this file.
1 
12 #ifndef DYNABUFFER_H_
13 #define DYNABUFFER_H_
14 
15 #include "ICacheConst.h"
16 #include "TypeDefs.h"
17 #include "String.h"
18 #include "UUID.h"
19 
20 class DynaBuffer : ICopyable<DynaBuffer> {
21  uint8_t* _buffer = nullptr;
22  uint _bufSize;
23  uint _bufEnd;
24  uint _bufPos;
25  uint _headerSize;
26  uint _elemSize;
27  bool _isDirty;
28 
29 public:
30  static bool THROW_EXCEPTIONS;
31 
32  DynaBuffer();
33  explicit DynaBuffer(uint size, bool zeroOut=false);
34  virtual ~DynaBuffer();
35 
36  DynaBuffer(const DynaBuffer& other);
37  DynaBuffer* copy() override;
38 
39  uint8_t* getInternalTypedArray() { return _buffer; }
40  void* getInternalRawArray() { return _buffer; }
41  uint8_t* getInternalTypedArrayAtPos(ulong pos) { return _buffer + pos; }
42 
43  void reset();
44  void clear();
45  void zeroFill(int fromIndex = 0, int toIndex = -1);
46  bool isDirty();
47  void setIsDirty(bool isDirty);
48  uint getPos() const;
49  bool setPos(uint pos);
50  uint adjustPos(int delta);
51  bool insertRegion(int index, int count);
52  bool deleteRegion(int index, int count);
53 
54  void setElemMode(uint headerSize, uint elemSize);
55  ulong getElemPos(int index) { return _headerSize + (index * _elemSize); }
56  uint getElemCapacity();
57  uint getElemCount();
58  bool getHeader(uint8_t& headerBuf);
59  bool putHeader(uint8_t& headerBuf);
60  bool getElem(int index, uint8_t& elemBuf);
61  bool setElem(int index, uint8_t& elemBuf);
62  bool getNextElem(uint8_t& elemBuf);
63  bool insertElem(int index, uint8_t& elemBuf);
64  bool insertElems(int index, uint8_t& elemBuf, int count);
65  bool appendElem(uint8_t& elemBuf);
66  bool removeElem(int index, uint8_t& elemBuf);
67  bool deleteElem(int index);
68  bool deleteElems(int frIndex, int toIndex);
69  bool moveElem(int index, int destIndex);
70  bool moveElems(int frIndex, int toIndex, int destIndex);
71  bool moveElems(int frIndex, int toIndex, DynaBuffer* dest, int destIndex);
72 
73  void invalidate();
74  bool isEmpty();
75  bool isFull();
76  bool hasCapacity();
77  bool hasRemainingCapacity(uint count);
78  uint getRemainingCapacity() const;
79  bool hasRemaining(uint count);
80  uint getRemaining() const;
81  bool requiresRemaining(uint count);
82 
83  uint getBufEnd() const;
84  void setBufEnd(uint count);
85  uint getBufferSize() const;
86  void setBufferSize(uint bufSize);
87 
88  bool hasNextByte();
89  uint8_t getNextByte();
90  uint8_t popLastByte();
91  short getNextShort();
93  int getNextInt();
94  uint getNextUInt();
95  long getNextLong();
96  ulong getNextULong();
97  long long getNextLongLong();
98  ulonglong getNextULongLong();
99  int64_t getNextInt64();
100  uint64_t getNextUInt64();
102  UUID getNextUUID();
103  float getNextFloat();
104  double getNextDouble();
105  long double getNextLongDouble();
106  bool getNextString(char* buf, uint count, bool addTerm);
107  void getNextString(char* buf, uint maxCount);
108  bool getNextString(String& str, uint maxCount = 0);
109  bool getNextLine(String& str);
110  bool getNextBuffer(byte* buf, uint offset, uint count);
111  bool getNextToken(String& str, char delim, uint maxCount = 0);
113 
114  void _putByte(uint8_t value);
115  bool putByte(uint8_t value);
116  bool putShort(short value);
117  bool putUShort(ushort value);
118  bool putInt(int value);
119  bool putUInt(uint value);
120  bool putLong(long value);
121  bool putULong(ulong value);
122  bool putLongLong(long long value);
123  bool putULongLong(ulonglong value);
124  bool putInt64(int64_t value);
125  bool putUInt64(uint64_t value);
126  bool putIndex(index_t value);
127  bool putUUID(UUID* value);
128  bool putFloat(float value);
129  bool putDouble(double value);
130  bool putLongDouble(long double value);
131  bool putString(const char* value, uint maxCount = 0, bool addTerm = true);
132  bool putString(const String& strValue, uint maxCount = 0, bool addTerm = true);
133  bool putBuffer(uint8_t* buf, uint offset, uint count);
134 };
135 
136 #endif /* DYNABUFFER_H_ */
bool isFull()
Definition: DynaBuffer.cpp:334
bool putByte(uint8_t value)
Definition: DynaBuffer.cpp:594
void _putByte(uint8_t value)
Definition: DynaBuffer.cpp:590
uint8_t * getInternalTypedArray()
Definition: DynaBuffer.h:39
uint16_t ushort
Definition: TypeDefs.h:23
UUID getNextUUID()
Definition: DynaBuffer.cpp:490
Definition: UUID.h:18
void invalidate()
Definition: DynaBuffer.cpp:324
double getNextDouble()
Definition: DynaBuffer.cpp:511
bool hasRemainingCapacity(uint count)
Definition: DynaBuffer.cpp:342
bool insertElem(int index, uint8_t &elemBuf)
Definition: DynaBuffer.cpp:189
bool putLongLong(long long value)
Definition: DynaBuffer.cpp:661
bool insertRegion(int index, int count)
Definition: DynaBuffer.cpp:93
bool putBuffer(uint8_t *buf, uint offset, uint count)
Definition: DynaBuffer.cpp:785
bool getElem(int index, uint8_t &elemBuf)
Definition: DynaBuffer.cpp:154
long getNextLong()
Definition: DynaBuffer.cpp:442
GeneratorWrapper< T > value(T &&value)
Definition: catch.hpp:4005
void reset()
Definition: DynaBuffer.cpp:64
bool putInt(int value)
Definition: DynaBuffer.cpp:625
bool getNextBuffer(byte *buf, uint offset, uint count)
Definition: DynaBuffer.cpp:561
bool putUInt64(uint64_t value)
Definition: DynaBuffer.cpp:683
DynaBuffer()
Definition: DynaBuffer.cpp:21
bool moveElems(int frIndex, int toIndex, int destIndex)
Definition: DynaBuffer.cpp:272
uint8_t * getInternalTypedArrayAtPos(ulong pos)
Definition: DynaBuffer.h:41
Definition: String.h:60
index_t getNextIndex()
Definition: DynaBuffer.cpp:481
void setIsDirty(bool isDirty)
Definition: DynaBuffer.cpp:72
bool moveElem(int index, int destIndex)
Definition: DynaBuffer.cpp:268
bool putULongLong(ulonglong value)
Definition: DynaBuffer.cpp:665
bool hasNextByte()
Definition: DynaBuffer.cpp:394
ulonglong getNextULongLong()
Definition: DynaBuffer.cpp:459
bool putULong(ulong value)
Definition: DynaBuffer.cpp:647
int64_t getNextInt64()
Definition: DynaBuffer.cpp:468
uint getBufEnd() const
Definition: DynaBuffer.cpp:366
uint8_t getNextByte()
Definition: DynaBuffer.cpp:398
void zeroFill(int fromIndex=0, int toIndex=-1)
Definition: DynaBuffer.cpp:50
int64_t index_t
Definition: ICacheConst.h:19
bool getHeader(uint8_t &headerBuf)
Definition: DynaBuffer.cpp:130
DynaBuffer * copy() override
Definition: DynaBuffer.cpp:46
uint8_t popLastByte()
Definition: DynaBuffer.cpp:407
uint getRemainingCapacity() const
Definition: DynaBuffer.cpp:346
bool putUUID(UUID *value)
Definition: DynaBuffer.cpp:711
virtual ~DynaBuffer()
Definition: DynaBuffer.cpp:33
void * getInternalRawArray()
Definition: DynaBuffer.h:40
long long getNextLongLong()
Definition: DynaBuffer.cpp:455
uint adjustPos(int delta)
Definition: DynaBuffer.cpp:88
bool putDouble(double value)
Definition: DynaBuffer.cpp:731
bool getNextElem(uint8_t &elemBuf)
Definition: DynaBuffer.cpp:178
return os str()
bool putHeader(uint8_t &headerBuf)
Definition: DynaBuffer.cpp:142
long double getNextLongDouble()
Definition: DynaBuffer.cpp:520
bool deleteElem(int index)
Definition: DynaBuffer.cpp:241
uint getRemaining() const
Definition: DynaBuffer.cpp:354
void setBufEnd(uint count)
Definition: DynaBuffer.cpp:370
uint getElemCount()
Definition: DynaBuffer.cpp:126
bool putFloat(float value)
Definition: DynaBuffer.cpp:717
static bool THROW_EXCEPTIONS
Definition: DynaBuffer.h:30
bool deleteElems(int frIndex, int toIndex)
Definition: DynaBuffer.cpp:245
bool putUShort(ushort value)
Definition: DynaBuffer.cpp:611
uint getPos() const
Definition: DynaBuffer.cpp:76
float getNextFloat()
Definition: DynaBuffer.cpp:502
bool putLongDouble(long double value)
Definition: DynaBuffer.cpp:745
bool isEmpty()
Definition: DynaBuffer.cpp:330
bool removeElem(int index, uint8_t &elemBuf)
Definition: DynaBuffer.cpp:227
short getNextShort()
Definition: DynaBuffer.cpp:416
bool hasRemaining(uint count)
Definition: DynaBuffer.cpp:350
bool hasCapacity()
Definition: DynaBuffer.cpp:338
String getBufferAsString()
Definition: DynaBuffer.cpp:582
bool putUInt(uint value)
Definition: DynaBuffer.cpp:629
bool requiresRemaining(uint count)
Definition: DynaBuffer.cpp:358
bool getNextToken(String &str, char delim, uint maxCount=0)
Definition: DynaBuffer.cpp:570
void clear()
Definition: DynaBuffer.cpp:57
bool setPos(uint pos)
Definition: DynaBuffer.cpp:80
void setBufferSize(uint bufSize)
Definition: DynaBuffer.cpp:379
bool getNextString(char *buf, uint count, bool addTerm)
Definition: DynaBuffer.cpp:529
ushort getNextUShort()
Definition: DynaBuffer.cpp:420
bool putInt64(int64_t value)
Definition: DynaBuffer.cpp:679
bool isDirty()
Definition: DynaBuffer.cpp:68
uint getElemCapacity()
Definition: DynaBuffer.cpp:122
bool getNextLine(String &str)
Definition: DynaBuffer.cpp:557
void setElemMode(uint headerSize, uint elemSize)
Definition: DynaBuffer.cpp:117
bool appendElem(uint8_t &elemBuf)
Definition: DynaBuffer.cpp:214
uint getNextUInt()
Definition: DynaBuffer.cpp:433
bool putIndex(index_t value)
Definition: DynaBuffer.cpp:697
int getNextInt()
Definition: DynaBuffer.cpp:429
bool setElem(int index, uint8_t &elemBuf)
Definition: DynaBuffer.cpp:166
uint getBufferSize() const
Definition: DynaBuffer.cpp:375
bool putString(const char *value, uint maxCount=0, bool addTerm=true)
Definition: DynaBuffer.cpp:759
ulong getNextULong()
Definition: DynaBuffer.cpp:446
Definition: ICopyable.h:8
Definition: DynaBuffer.h:20
bool putShort(short value)
Definition: DynaBuffer.cpp:607
bool deleteRegion(int index, int count)
Definition: DynaBuffer.cpp:104
bool putLong(long value)
Definition: DynaBuffer.cpp:643
bool insertElems(int index, uint8_t &elemBuf, int count)
Definition: DynaBuffer.cpp:201
uint64_t getNextUInt64()
Definition: DynaBuffer.cpp:472
ulong getElemPos(int index)
Definition: DynaBuffer.h:55