AllianceDB  0.0.1
AllianceDB is an open-source suite, including benchmarks and libs for evaluating and improving stream operation algorithms on modern hardwares.
C20Buffers.hpp
Go to the documentation of this file.
1 
2 //
3 // Created by tony on 11/03/22.
4 //
5 #pragma once
6 #ifndef _UTILS_C20BUFFERS_HPP_
7 #define _UTILS_C20BUFFERS_HPP_
8 
9 #include <vector>
10 #include <memory>
11 #if defined(__GNUC__) && (__GNUC__ >= 4)
12 #define ADB_memcpy(dst, src, size) __builtin_memcpy(dst, src, size)
13 #else
14 #define ADB_memcpy(dst, src, size) memcpy(dst, src, size)
15 #endif
26 namespace INTELLI {
32 template<typename dataType>
33 class C20Buffer {
34  protected:
35  size_t pos = 0;
36  public:
37  std::vector<dataType> area;
41  void reset() {
42  pos = 0;
43  }
44  C20Buffer() { reset(); }
45  ~C20Buffer() {}
46 
51  C20Buffer(size_t len) {
52  area = std::vector<dataType>(len);
53  reset();
54  }
61  size_t bufferSize() {
62  return area.size();
63  }
70  size_t size() {
71  return pos;
72  }
77  dataType *data() {
78  return &area[0];
79  }
86  dataType *data(size_t offset) {
87  return &area[offset];
88  }
95  size_t append(dataType da) {
96  /*if(pos<area.size())
97  {
98  area[pos]=da;
99  pos++;
100  }
101  else
102  {
103  area.push_back(da);
104  pos=area.size();
105  }*/
106  area[pos] = da;
107  pos++;
108  return pos;
109  }
117  size_t append(dataType *da, size_t len) {
118  ADB_memcpy(&area[pos], da, len * sizeof(dataType));
119  pos += len;
120  return pos;
121  }
122 };
126 }
127 #endif //ALIANCEDB_INCLUDE_UTILS_C20BUFFERS_HPP_
Definition: C20Buffers.hpp:33
size_t bufferSize()
To get how many elements are allowed in the buffer.
Definition: C20Buffers.hpp:61
size_t append(dataType *da, size_t len)
Append the data to the buffer.
Definition: C20Buffers.hpp:117
void reset()
reset this buffer, set pos back to 0
Definition: C20Buffers.hpp:41
C20Buffer(size_t len)
Init with original length of buffer.
Definition: C20Buffers.hpp:51
size_t size()
To get how many VALID elements are existed in the buffer.
Definition: C20Buffers.hpp:70
dataType * data()
To get the original memory area ponter of data.
Definition: C20Buffers.hpp:77
dataType * data(size_t offset)
To get the original memory area ponter of data, with offset.
Definition: C20Buffers.hpp:86
size_t append(dataType da)
Append the data to the buffer.
Definition: C20Buffers.hpp:95
Definition: DatasetTool.h:10