OoOJoin  0.0.1
The next generation of out-of-order join operator
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
24 namespace INTELLI {
30 template<typename dataType>
31 class C20Buffer {
32  protected:
33  size_t pos = 0;
34  public:
35  std::vector<dataType> area;
39  void reset() {
40  pos = 0;
41  }
42  C20Buffer() { reset(); }
43  ~C20Buffer() {}
44 
49  C20Buffer(size_t len) {
50  area = std::vector<dataType>(len);
51  reset();
52  }
59  size_t bufferSize() {
60  return area.size();
61  }
68  size_t size() {
69  return pos;
70  }
75  dataType *data() {
76  return &area[0];
77  }
84  dataType *data(size_t offset) {
85  return &area[offset];
86  }
93  size_t append(dataType da) {
94  /*if(pos<area.size())
95  {
96  area[pos]=da;
97  pos++;
98  }
99  else
100  {
101  area.push_back(da);
102  pos=area.size();
103  }*/
104  area[pos] = da;
105  pos++;
106  return pos;
107  }
115  size_t append(dataType *da, size_t len) {
116  ADB_memcpy(&area[pos], da, len * sizeof(dataType));
117  pos += len;
118  return pos;
119  }
120 };
124 }
125 #endif //ALIANCEDB_INCLUDE_UTILS_C20BUFFERS_HPP_
Definition: C20Buffers.hpp:31
size_t bufferSize()
To get how many elements are allowed in the buffer.
Definition: C20Buffers.hpp:59
size_t append(dataType *da, size_t len)
Append the data to the buffer.
Definition: C20Buffers.hpp:115
void reset()
reset this buffer, set pos back to 0
Definition: C20Buffers.hpp:39
C20Buffer(size_t len)
Init with original length of buffer.
Definition: C20Buffers.hpp:49
size_t size()
To get how many VALID elements are existed in the buffer.
Definition: C20Buffers.hpp:68
dataType * data()
To get the original memory area ponter of data.
Definition: C20Buffers.hpp:75
dataType * data(size_t offset)
To get the original memory area ponter of data, with offset.
Definition: C20Buffers.hpp:84
size_t append(dataType da)
Append the data to the buffer.
Definition: C20Buffers.hpp:93