LMMS
Loading...
Searching...
No Matches
MemoryBlock Class Reference

#include <MemoryBlock.h>

Public Member Functions

 MemoryBlock () noexcept
 MemoryBlock (const size_t initialSize, bool initialiseToZero=false)
 MemoryBlock (const MemoryBlock &)
 MemoryBlock (const void *dataToInitialiseFrom, size_t sizeInBytes)
 ~MemoryBlock () noexcept
MemoryBlockoperator= (const MemoryBlock &)
bool operator== (const MemoryBlock &other) const noexcept
bool operator!= (const MemoryBlock &other) const noexcept
bool matches (const void *data, size_t dataSize) const noexcept
voidgetData () const noexcept
template<typename Type>
char & operator[] (const Type offset) const noexcept
size_t getSize () const noexcept
void setSize (const size_t newSize, bool initialiseNewSpaceToZero=false)
void ensureSize (const size_t minimumSize, bool initialiseNewSpaceToZero=false)
void reset ()
void fillWith (uint8 valueToUse) noexcept
void append (const void *data, size_t numBytes)
void replaceWith (const void *data, size_t numBytes)
void insert (const void *dataToInsert, size_t numBytesToInsert, size_t insertPosition)
void removeSection (size_t startByte, size_t numBytesToRemove)
void copyFrom (const void *srcData, int destinationOffset, size_t numBytes) noexcept
void copyTo (void *destData, int sourceOffset, size_t numBytes) const noexcept
void swapWith (MemoryBlock &other) noexcept
voidrelease () noexcept
String toString () const
void loadFromHexString (StringRef sourceHexString)
void setBitRange (size_t bitRangeStart, size_t numBits, int binaryNumberToApply) noexcept
int getBitRange (size_t bitRangeStart, size_t numBitsToRead) const noexcept

Private Attributes

HeapBlock< char > data
size_t size

Detailed Description

A class to hold a resizable block of raw data.

Constructor & Destructor Documentation

◆ MemoryBlock() [1/4]

Create an uninitialised block with 0 size.

◆ MemoryBlock() [2/4]

water::MemoryBlock::MemoryBlock ( const size_t initialSize,
bool initialiseToZero = false )

Creates a memory block with a given initial size.

Parameters
initialSizethe size of block to create
initialiseToZerowhether to clear the memory or just leave it uninitialised

◆ MemoryBlock() [3/4]

Creates a copy of another memory block.

◆ MemoryBlock() [4/4]

water::MemoryBlock::MemoryBlock ( const void * dataToInitialiseFrom,
size_t sizeInBytes )

Creates a memory block using a copy of a block of data.

Parameters
dataToInitialiseFromsome data to copy into this block
sizeInByteshow much space to use

◆ ~MemoryBlock()

Destructor.

Member Function Documentation

◆ append()

void water::MemoryBlock::append ( const void * data,
size_t numBytes )

Adds another block of data to the end of this one. The data pointer must not be null. This block's size will be increased accordingly.

◆ copyFrom()

void water::MemoryBlock::copyFrom ( const void * srcData,
int destinationOffset,
size_t numBytes )
noexcept

Copies data into this MemoryBlock from a memory address.

Parameters
srcDatathe memory location of the data to copy into this block
destinationOffsetthe offset in this block at which the data being copied should begin
numByteshow much to copy in (if this goes beyond the size of the memory block, it will be clipped so not to do anything nasty)

◆ copyTo()

void water::MemoryBlock::copyTo ( void * destData,
int sourceOffset,
size_t numBytes ) const
noexcept

Copies data from this MemoryBlock to a memory address.

Parameters
destDatathe memory location to write to
sourceOffsetthe offset within this block from which the copied data will be read
numByteshow much to copy (if this extends beyond the limits of the memory block, zeros will be used for that portion of the data)

◆ ensureSize()

void water::MemoryBlock::ensureSize ( const size_t minimumSize,
bool initialiseNewSpaceToZero = false )

Increases the block's size only if it's smaller than a given size.

Parameters
minimumSizeif the block is already bigger than this size, no action will be taken; otherwise it will be increased to this size
initialiseNewSpaceToZeroif the block gets enlarged, this determines whether to clear the new section or just leave it uninitialised
See also
setSize

◆ fillWith()

void water::MemoryBlock::fillWith ( uint8 valueToUse)
noexcept

Fills the entire memory block with a repeated byte value. This is handy for clearing a block of memory to zero.

◆ getBitRange()

int water::MemoryBlock::getBitRange ( size_t bitRangeStart,
size_t numBitsToRead ) const
noexcept

Reads a number of bits from the memory block, treating it as one long binary sequence

◆ getData()

void * water::MemoryBlock::getData ( ) const
inlinenoexcept

Returns a void pointer to the data.

Note that the pointer returned will probably become invalid when the block is resized.

◆ getSize()

size_t water::MemoryBlock::getSize ( ) const
inlinenoexcept

Returns the block's current allocated size, in bytes.

◆ insert()

void water::MemoryBlock::insert ( const void * dataToInsert,
size_t numBytesToInsert,
size_t insertPosition )

Inserts some data into the block. The dataToInsert pointer must not be null. This block's size will be increased accordingly. If the insert position lies outside the valid range of the block, it will be clipped to within the range before being used.

◆ loadFromHexString()

void water::MemoryBlock::loadFromHexString ( StringRef sourceHexString)

Parses a string of hexadecimal numbers and writes this data into the memory block.

The block will be resized to the number of valid bytes read from the string. Non-hex characters in the string will be ignored.

See also
String::toHexString()

◆ matches()

bool water::MemoryBlock::matches ( const void * data,
size_t dataSize ) const
noexcept

Returns true if the data in this MemoryBlock matches the raw bytes passed-in.

◆ operator!=()

bool water::MemoryBlock::operator!= ( const MemoryBlock & other) const
noexcept

Compares two memory blocks.

Returns
true if the two blocks are different sizes or have different contents.

◆ operator=()

MemoryBlock & water::MemoryBlock::operator= ( const MemoryBlock & other)

Copies another memory block onto this one. This block will be resized and copied to exactly match the other one.

◆ operator==()

bool water::MemoryBlock::operator== ( const MemoryBlock & other) const
noexcept

Compares two memory blocks.

Returns
true only if the two blocks are the same size and have identical contents.

◆ operator[]()

template<typename Type>
char & water::MemoryBlock::operator[] ( const Type offset) const
inlinenoexcept

Returns a byte from the memory block. This returns a reference, so you can also use it to set a byte.

◆ release()

Release this object's data ownership, returning the data pointer.

◆ removeSection()

void water::MemoryBlock::removeSection ( size_t startByte,
size_t numBytesToRemove )

Chops out a section of the block.

This will remove a section of the memory block and close the gap around it, shifting any subsequent data downwards and reducing the size of the block.

If the range specified goes beyond the size of the block, it will be clipped.

◆ replaceWith()

void water::MemoryBlock::replaceWith ( const void * data,
size_t numBytes )

Resizes this block to the given size and fills its contents from the supplied buffer. The data pointer must not be null.

◆ reset()

Frees all the blocks data, setting its size to 0.

◆ setBitRange()

void water::MemoryBlock::setBitRange ( size_t bitRangeStart,
size_t numBits,
int binaryNumberToApply )
noexcept

Sets a number of bits in the memory block, treating it as a long binary sequence.

◆ setSize()

void water::MemoryBlock::setSize ( const size_t newSize,
bool initialiseNewSpaceToZero = false )

Resizes the memory block.

Any data that is present in both the old and new sizes will be retained. When enlarging the block, the new space that is allocated at the end can either be cleared, or left uninitialised.

Parameters
newSizethe new desired size for the block
initialiseNewSpaceToZeroif the block gets enlarged, this determines whether to clear the new section or just leave it uninitialised
See also
ensureSize

◆ swapWith()

Exchanges the contents of this and another memory block. No actual copying is required for this, so it's very fast.

◆ toString()

Attempts to parse the contents of the block as a zero-terminated UTF8 string.

Member Data Documentation

◆ data

HeapBlock<char> water::MemoryBlock::data
private

◆ size

size_t water::MemoryBlock::size
private

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