MySQL 8.0.39
Source Code Documentation
|
Class that manages dynamic buffers. More...
#include <dyn0buf.h>
Classes | |
class | block_t |
Public Member Functions | |
typedef | UT_LIST_NODE_T (block_t) block_node_t |
typedef | UT_LIST_BASE_NODE_T (block_t, m_node) block_list_t |
dyn_buf_t () | |
Default constructor. More... | |
~dyn_buf_t () | |
Destructor. More... | |
void | erase () |
Reset the buffer vector. More... | |
byte * | open (ulint size) |
Makes room on top and returns a pointer to a buffer in it. More... | |
void | close (const byte *ptr) |
Closes the buffer returned by open. More... | |
template<typename Type > | |
Type | push (uint32_t size) |
Makes room on top and returns a pointer to the added element. More... | |
void | push (const byte *ptr, uint32_t len) |
Pushes n bytes. More... | |
template<typename Type > | |
const Type | at (ulint pos) const |
Returns a pointer to an element in the buffer. More... | |
template<typename Type > | |
Type | at (ulint pos) |
Returns a pointer to an element in the buffer. More... | |
ulint | size () const |
Returns the size of the total stored data. More... | |
template<typename Functor > | |
bool | for_each_block (Functor &functor) const |
Iterate over each block and call the functor. More... | |
template<typename Functor > | |
bool | for_each_block_in_reverse (Functor &functor) const |
Iterate over all the blocks in reverse and call the iterator. More... | |
block_t * | front () |
bool | is_small () const |
Static Public Attributes | |
static constexpr auto | MAX_DATA_SIZE = block_t::MAX_DATA_SIZE |
Private Member Functions | |
dyn_buf_t (dyn_buf_t &&)=delete | |
dyn_buf_t (const dyn_buf_t &)=delete | |
dyn_buf_t & | operator= (dyn_buf_t &&)=delete |
dyn_buf_t & | operator= (const dyn_buf_t &)=delete |
void | push_back (block_t *block) |
Add the block to the end of the list. More... | |
block_t * | back () |
bool | has_space (ulint size) const |
bool | has_space (ulint size) |
block_t * | find (ulint &pos) |
Find the block that contains the pos. More... | |
block_t * | add_block () |
Allocate and add a new block to m_list. More... | |
Private Attributes | |
mem_heap_t * | m_heap |
Heap to use for memory allocation. More... | |
block_list_t | m_list |
Allocated blocks. More... | |
ulint | m_size |
Total size used by all blocks. More... | |
block_t | m_first_block |
The default block, should always be the first element. More... | |
Class that manages dynamic buffers.
It uses a UT_LIST of dyn_buf_t::block_t instances. We don't use STL containers in order to avoid the overhead of heap calls. Using a custom memory allocator doesn't solve the problem either because we have to get the memory from somewhere. We can't use the block_t::m_data as the backend for the custom allocator because we would like the data in the blocks to be contiguous.
Default constructor.
|
privatedelete |
|
privatedelete |
|
inlineprivate |
Allocate and add a new block to m_list.
|
inline |
Returns a pointer to an element in the buffer.
non const version.
pos | position of element in bytes from start |
|
inline |
Returns a pointer to an element in the buffer.
const version.
pos | position of element in bytes from start |
|
inline |
Closes the buffer returned by open.
ptr | end of used space |
|
inline |
Reset the buffer vector.
|
inlineprivate |
Find the block that contains the pos.
pos | absolute offset, it is updated to make it relative to the block |
|
inline |
Iterate over each block and call the functor.
|
inline |
Iterate over all the blocks in reverse and call the iterator.
|
inlineprivate |
|
inlineprivate |
|
inline |
Makes room on top and returns a pointer to a buffer in it.
After copying the elements, the caller must close the buffer using close().
size | in bytes of the buffer; MUST be <= MAX_DATA_SIZE! |
|
privatedelete |
|
privatedelete |
|
inline |
Pushes n bytes.
ptr | string to write |
len | string length |
|
inline |
Makes room on top and returns a pointer to the added element.
The caller must copy the element to the pointer returned.
size | in bytes of the element |
|
inlineprivate |
Add the block to the end of the list.
Returns the size of the total stored data.
typedef dyn_buf_t< SIZE >::UT_LIST_BASE_NODE_T | ( | block_t | , |
m_node | |||
) |
The default block, should always be the first element.
This is for backwards compatibility and to avoid an extra heap allocation for small REDO log records
|
private |
Heap to use for memory allocation.
|
private |
Allocated blocks.
Total size used by all blocks.
|
staticconstexpr |