Cbeam
Loading...
Searching...
No Matches
cbeam::container::buffer Class Reference

Manages memory a byte buffer, offering dynamic appending. This class is designed for scenarios where performance and control are crucial, such as in systems with dynamic memory requirements or real-time constraints. It uses malloc and free for efficient resizing of memory blocks without initialization overhead, as it internally uses the plain data type uint8_t. More...

#include <buffer.hpp>

Inheritance diagram for cbeam::container::buffer:

Public Member Functions

 buffer ()=default
 Will not create any memory block. Use append to create one or append bytes to an existing one.
 
 buffer (const std::size_t size, const std::size_t size_of_type=1)
 Create a managed memory block with optional element size.
 
virtual ~buffer () noexcept
 Deallocate the memory block.
 
 buffer (const void *address, const std::size_t length_of_buffer)
 Create an instance from a given memory block from address.
 
 buffer (const buffer &other)
 Copy construction means that the other buffer is deep copied to construct this instance.
 
virtual void append (const void *buffer_to_append, const std::size_t length_of_buffer)
 append the given buffer to the end of the current buffer. If there is no current buffer yet, it will be allocated. Memory will be copied if required, otherwise expanded.
 
virtual std::size_t size () const noexcept
 returns the size of the buffer in bytes
 
virtual bufferoperator= (const buffer &other)
 make a deep copy of the other buffer, overwriting the content of this buffer
 
virtual void * get () const noexcept
 return a pointer to the managed memory block
 
virtual void reset () noexcept
 Resets the shared_buffer instance, deallocating the managed memory block.
 
virtual void swap (buffer &other) noexcept
 Swaps the contents of this shared_buffer with another shared_buffer.
 

Protected Attributes

std::size_t _size {0}
 
uint8_t * _buffer {nullptr}
 

Detailed Description

Manages memory a byte buffer, offering dynamic appending. This class is designed for scenarios where performance and control are crucial, such as in systems with dynamic memory requirements or real-time constraints. It uses malloc and free for efficient resizing of memory blocks without initialization overhead, as it internally uses the plain data type uint8_t.

Constructor & Destructor Documentation

◆ buffer() [1/4]

cbeam::container::buffer::buffer ( )
default

Will not create any memory block. Use append to create one or append bytes to an existing one.

◆ buffer() [2/4]

cbeam::container::buffer::buffer ( const std::size_t size,
const std::size_t size_of_type = 1 )
inline

Create a managed memory block with optional element size.

Parameters
sizeNumber of elements to allocate. Defaults to allocating single bytes if size_of_type is not specified.
size_of_type(Optional) Byte size of each element to allocate. Defaults to 1 if not specified, allowing for byte-sized handling similar to std::memset.

◆ ~buffer()

virtual cbeam::container::buffer::~buffer ( )
inlinevirtualnoexcept

Deallocate the memory block.

◆ buffer() [3/4]

cbeam::container::buffer::buffer ( const void * address,
const std::size_t length_of_buffer )
inlineexplicit

Create an instance from a given memory block from address.

◆ buffer() [4/4]

cbeam::container::buffer::buffer ( const buffer & other)
inline

Copy construction means that the other buffer is deep copied to construct this instance.

Member Function Documentation

◆ append()

virtual void cbeam::container::buffer::append ( const void * buffer_to_append,
const std::size_t length_of_buffer )
inlinevirtual

append the given buffer to the end of the current buffer. If there is no current buffer yet, it will be allocated. Memory will be copied if required, otherwise expanded.

◆ get()

virtual void * cbeam::container::buffer::get ( ) const
inlinevirtualnoexcept

return a pointer to the managed memory block

◆ operator=()

virtual buffer & cbeam::container::buffer::operator= ( const buffer & other)
inlinevirtual

make a deep copy of the other buffer, overwriting the content of this buffer

Reimplemented in cbeam::container::stable_reference_buffer.

◆ reset()

virtual void cbeam::container::buffer::reset ( )
inlinevirtualnoexcept

Resets the shared_buffer instance, deallocating the managed memory block.

Reimplemented in cbeam::container::stable_reference_buffer.

◆ size()

virtual std::size_t cbeam::container::buffer::size ( ) const
inlinevirtualnoexcept

returns the size of the buffer in bytes

◆ swap()

virtual void cbeam::container::buffer::swap ( buffer & other)
inlinevirtualnoexcept

Swaps the contents of this shared_buffer with another shared_buffer.

Parameters
otherAnother shared_buffer to swap with

Reimplemented in cbeam::container::stable_reference_buffer.

Member Data Documentation

◆ _buffer

uint8_t* cbeam::container::buffer::_buffer {nullptr}
protected

◆ _size

std::size_t cbeam::container::buffer::_size {0}
protected

The documentation for this class was generated from the following file: