@@ -77,9 +77,16 @@ class BlockBufferBase {
7777
7878 virtual void Set (char *ptr, size_t size);
7979
80- void Write (char *ptr, size_t size);
80+ inline void Write (char *ptr, size_t size) {
81+ Assert (block_pos_ + size <= block_buffer_.End ());
82+ memcpy (block_pos_, ptr, size);
83+ }
84+
85+ inline void WriteZero (size_t size) {
86+ Assert (block_pos_ + size <= block_buffer_.End ());
87+ memset (block_pos_, 0 , size);
88+ }
8189
82- void WriteZero (size_t size);
8390
8491 void Combine (const BlockBufferBase &buffer);
8592
@@ -139,12 +146,16 @@ class DataBuffer : public BlockBufferBase {
139146 data_buffer_(reinterpret_cast <T *>(data_buffer.data_buffer_)) {}
140147
141148 // Direct access elements of internal buffer
142- T &operator [](size_t i);
149+ inline T &operator [](size_t i) {
150+ return data_buffer_[i];
151+ }
143152
144- T *StartT () const { return data_buffer_; }
153+ inline T *StartT () const { return data_buffer_; }
145154
146155 // Get size of elements of internal buffer
147- size_t GetSize ();
156+ inline size_t GetSize () {
157+ return Used () / sizeof (T);
158+ }
148159
149160 ~DataBuffer () override ;
150161
@@ -160,22 +171,41 @@ class DataBuffer : public BlockBufferBase {
160171
161172 // Direct write a element into available buffer
162173 // Should call `Brush` after write
163- virtual void Write (T value);
174+ inline void Write (T value) {
175+ Assert (block_pos_ + sizeof (T) <= block_buffer_.End ());
176+ *(reinterpret_cast <T *>(block_pos_)) = value;
177+ }
164178
165- virtual void Write (T *ptr, size_t size);
179+ inline void Write (T *ptr, size_t size) {
180+ Assert (size % sizeof (T) == 0 && (block_pos_ + size) <= block_buffer_.End ());
181+ memcpy (block_pos_, reinterpret_cast <const char *>(ptr), size);
182+ }
166183
167- virtual void Write (const T *ptr, size_t size);
184+ inline void Write (const T *ptr, size_t size) {
185+ Assert (size % sizeof (T) == 0 && (block_pos_ + size) <= block_buffer_.End ());
186+ memcpy (block_pos_, reinterpret_cast <const char *>(ptr), size);
187+ }
168188
169189 // Read all to dst pointer
170- virtual void Read (T *dst);
190+ inline void Read (T *dst) {
191+ Assert (Used () > sizeof (T) && Used () <= Capacity ());
192+ memcpy (dst, block_pos_, sizeof (T));
193+ }
171194
172- virtual void Read (void *dst, size_t n);
195+ inline void Read (void *dst, size_t n) {
196+ Assert (Used () > n && Used () <= Capacity ());
197+ memcpy (dst, block_pos_, n);
198+ }
173199
174200 // Get the internal buffer pointer
175- T *GetBuffer () const ;
201+ inline T *GetBuffer () const {
202+ return data_buffer_;
203+ }
176204
177205 // Get the available buffer pointer
178- T *GetAvailableBuffer () const ;
206+ inline T *GetAvailableBuffer () const {
207+ return data_buffer_ + Used ();
208+ }
179209
180210 // Resize the internal buffer, size should bigger than capacity of internal
181211 // buffer `mem_take_over` should be true
@@ -188,13 +218,22 @@ class DataBuffer : public BlockBufferBase {
188218 virtual void ReSize (size_t size);
189219
190220 // Is current internal buffer take over by DataBuffer
191- bool IsMemTakeOver () const ;
221+ inline bool IsMemTakeOver () const {
222+ return mem_take_over_;
223+ }
192224
193- void SetMemTakeOver (bool take_over);
225+ inline void SetMemTakeOver (bool take_over) {
226+ mem_take_over_ = take_over;
227+ }
194228
195229 // Clear up the DataBuffer
196230 // Caller should call `Set` to reuse current `DataBuffer` after call `Clear`
197- virtual void Clear ();
231+ inline void Clear () {
232+ if (mem_take_over_ && data_buffer_) {
233+ cbdb::Pfree (data_buffer_);
234+ }
235+ data_buffer_ = nullptr ;
236+ }
198237
199238 protected:
200239 bool mem_take_over_;
0 commit comments