icy

BitReader

Class for reading binary streams.

#include <buffer.h>

class BitReader

Defined in src/base/include/icy/buffer.h:273

Friends

NameDescription
operator<< inline

operator<<

inline

friend inline std::ostream & operator<<(std::ostream & stream, const BitReader & buf)

Defined in src/base/include/icy/buffer.h:423

Public Methods

ReturnNameDescription
BitReaderConstructs a [BitReader](#bitreader) over a raw byte array.
BitReaderConstructs a [BitReader](#bitreader) over a [Buffer](base.html#buffer).
BitReaderConstructs a [BitReader](#bitreader) over a [ConstBuffer](icy-ConstBuffer.html#constbuffer-6).
~BitReader
voidgetReads a value from the BitReader. Returns false if there isn't enough data left for the specified type. Throws a std::out_of_range exception if reading past the limit. Reads len raw bytes into val. Throws std::out_of_range if insufficient data remains.
voidgetReads len bytes and appends them to val. Throws std::out_of_range if insufficient data remains.
voidgetU8Reads an unsigned 8-bit integer. Throws std::out_of_range if insufficient data remains.
voidgetU16Reads an unsigned 16-bit integer, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.
voidgetU24Reads an unsigned 24-bit integer into a 32-bit variable, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.
voidgetU32Reads an unsigned 32-bit integer, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.
voidgetU64Reads an unsigned 64-bit integer, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.
charpeekPeeks at the current byte without advancing the position.
uint8_tpeekU8Peeks at the current byte as a uint8_t without advancing the position.
uint16_tpeekU16Peeks at the next two bytes as a uint16_t without advancing the position.
uint32_tpeekU24Peeks at the next three bytes as a uint32_t without advancing the position.
uint32_tpeekU32Peeks at the next four bytes as a uint32_t without advancing the position.
uint64_tpeekU64Peeks data from the BitReader. -1 is returned if reading past boundary.
size_tskipToCharAdvances the position until the given character is found, stopping before it.
size_tskipWhitespaceAdvances the position past any leading space characters.
size_tskipToNextLineAdvances the position past the end of the current line (past the newline).
size_tskipNextWordAdvances the position past the next whitespace-delimited word.
size_treadNextWordReads the next whitespace-delimited word into val.
size_treadNextNumberReads the next whitespace-delimited decimal number into val.
size_treadLineReads bytes up to (but not including) the next newline into val.
size_treadToNextReads bytes up to (but not including) the next occurrence of c into val.
voidseekSet position pointer to absolute position. Throws a std::out_of_range exception if the value exceeds the limit.
voidskipSet position pointer to relative position. Throws a std::out_of_range exception if the value exceeds the limit.
size_tlimit const nodiscardReturns the read limit.
size_tposition const inline nodiscardReturns the current read position.
size_tavailable const nodiscardReturns the number of elements between the current position and the limit.
const char *begin const inline nodiscardReturns a pointer to the start of the buffer.
const char *current const inline nodiscardReturns a pointer to the current read position.
ByteOrderorder const inlineReturns the byte order used for multi-byte integer reads.
std::stringtoStringReturns the remaining unread bytes as a std::string.

BitReader

BitReader(const char * bytes, size_t size, ByteOrder order = ByteOrder::Network)

Defined in src/base/include/icy/buffer.h:280

Constructs a [BitReader](#bitreader) over a raw byte array.

Parameters

ParameterTypeDescription
bytesconst char *Pointer to the start of the data. Must remain valid for the lifetime of the reader.
sizesize_tNumber of bytes available for reading.
orderByteOrderByte order used when reading multi-byte integer types.

BitReader

BitReader(const Buffer & buf, ByteOrder order = ByteOrder::Network)

Defined in src/base/include/icy/buffer.h:285

Constructs a [BitReader](#bitreader) over a [Buffer](base.html#buffer).

Parameters

ParameterTypeDescription
bufconst Buffer &Source buffer. Must remain valid for the lifetime of the reader.
orderByteOrderByte order used when reading multi-byte integer types.

BitReader

BitReader(const ConstBuffer & pod, ByteOrder order = ByteOrder::Network)

Defined in src/base/include/icy/buffer.h:290

Constructs a [BitReader](#bitreader) over a [ConstBuffer](icy-ConstBuffer.html#constbuffer-6).

Parameters

ParameterTypeDescription
podconst ConstBuffer &Source const buffer. Must remain valid for the lifetime of the reader.
orderByteOrderByte order used when reading multi-byte integer types.

~BitReader

~BitReader()

Defined in src/base/include/icy/buffer.h:291


get

void get(char * val, size_t len)

Defined in src/base/include/icy/buffer.h:299

Reads a value from the BitReader. Returns false if there isn't enough data left for the specified type. Throws a std::out_of_range exception if reading past the limit. Reads len raw bytes into val. Throws std::out_of_range if insufficient data remains.

Parameters

ParameterTypeDescription
valchar *Destination buffer; must have capacity of at least len bytes.
lensize_tNumber of bytes to read.

get

void get(std::string & val, size_t len)

Defined in src/base/include/icy/buffer.h:304

Reads len bytes and appends them to val. Throws std::out_of_range if insufficient data remains.

Parameters

ParameterTypeDescription
valstd::string &String to append the read bytes to.
lensize_tNumber of bytes to read.

getU8

void getU8(uint8_t & val)

Defined in src/base/include/icy/buffer.h:308

Reads an unsigned 8-bit integer. Throws std::out_of_range if insufficient data remains.

Parameters

ParameterTypeDescription
valuint8_t &Output parameter receiving the read value.

getU16

void getU16(uint16_t & val)

Defined in src/base/include/icy/buffer.h:312

Reads an unsigned 16-bit integer, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.

Parameters

ParameterTypeDescription
valuint16_t &Output parameter receiving the read value.

getU24

void getU24(uint32_t & val)

Defined in src/base/include/icy/buffer.h:316

Reads an unsigned 24-bit integer into a 32-bit variable, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.

Parameters

ParameterTypeDescription
valuint32_t &Output parameter receiving the read value.

getU32

void getU32(uint32_t & val)

Defined in src/base/include/icy/buffer.h:320

Reads an unsigned 32-bit integer, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.

Parameters

ParameterTypeDescription
valuint32_t &Output parameter receiving the read value.

getU64

void getU64(uint64_t & val)

Defined in src/base/include/icy/buffer.h:324

Reads an unsigned 64-bit integer, applying byte-order conversion. Throws std::out_of_range if insufficient data remains.

Parameters

ParameterTypeDescription
valuint64_t &Output parameter receiving the read value.

peek

char peek()

Defined in src/base/include/icy/buffer.h:328

Peeks at the current byte without advancing the position.

Returns

Current byte as char, or 0 if at the end of the buffer.


peekU8

uint8_t peekU8()

Defined in src/base/include/icy/buffer.h:332

Peeks at the current byte as a uint8_t without advancing the position.

Returns

Current value, or 0 if at the end of the buffer.


peekU16

uint16_t peekU16()

Defined in src/base/include/icy/buffer.h:336

Peeks at the next two bytes as a uint16_t without advancing the position.

Returns

Current value with byte-order conversion applied, or 0 on failure.


peekU24

uint32_t peekU24()

Defined in src/base/include/icy/buffer.h:340

Peeks at the next three bytes as a uint32_t without advancing the position.

Returns

Current value with byte-order conversion applied, or 0 on failure.


peekU32

uint32_t peekU32()

Defined in src/base/include/icy/buffer.h:344

Peeks at the next four bytes as a uint32_t without advancing the position.

Returns

Current value with byte-order conversion applied, or 0 on failure.


peekU64

uint64_t peekU64()

Defined in src/base/include/icy/buffer.h:348

Peeks data from the BitReader. -1 is returned if reading past boundary.


skipToChar

size_t skipToChar(char c)

Defined in src/base/include/icy/buffer.h:357

Advances the position until the given character is found, stopping before it.

Returns

Number of bytes skipped.

Parameters

ParameterTypeDescription
ccharCharacter to search for.

skipWhitespace

size_t skipWhitespace()

Defined in src/base/include/icy/buffer.h:361

Advances the position past any leading space characters.

Returns

Number of bytes skipped.


skipToNextLine

size_t skipToNextLine()

Defined in src/base/include/icy/buffer.h:365

Advances the position past the end of the current line (past the newline).

Returns

Number of bytes skipped including the newline character.


skipNextWord

size_t skipNextWord()

Defined in src/base/include/icy/buffer.h:369

Advances the position past the next whitespace-delimited word.

Returns

Number of bytes skipped.


readNextWord

size_t readNextWord(std::string & val)

Defined in src/base/include/icy/buffer.h:374

Reads the next whitespace-delimited word into val.

Returns

Number of bytes consumed.

Parameters

ParameterTypeDescription
valstd::string &String to receive the word.

readNextNumber

size_t readNextNumber(unsigned int & val)

Defined in src/base/include/icy/buffer.h:379

Reads the next whitespace-delimited decimal number into val.

Returns

Number of bytes consumed.

Parameters

ParameterTypeDescription
valunsigned int &Output parameter receiving the parsed unsigned integer.

readLine

size_t readLine(std::string & val)

Defined in src/base/include/icy/buffer.h:384

Reads bytes up to (but not including) the next newline into val.

Returns

Number of bytes consumed including the newline.

Parameters

ParameterTypeDescription
valstd::string &String to receive the line content.

readToNext

size_t readToNext(std::string & val, char c)

Defined in src/base/include/icy/buffer.h:390

Reads bytes up to (but not including) the next occurrence of c into val.

Returns

Number of bytes consumed.

Parameters

ParameterTypeDescription
valstd::string &String to receive the read bytes.
ccharDelimiter character to stop at.

seek

void seek(size_t val)

Defined in src/base/include/icy/buffer.h:394

Set position pointer to absolute position. Throws a std::out_of_range exception if the value exceeds the limit.


skip

void skip(size_t size)

Defined in src/base/include/icy/buffer.h:398

Set position pointer to relative position. Throws a std::out_of_range exception if the value exceeds the limit.


limit

const nodiscard

[[nodiscard]] size_t limit() const

Defined in src/base/include/icy/buffer.h:401

Returns the read limit.


position

const inline nodiscard

[[nodiscard]] inline size_t position() const

Defined in src/base/include/icy/buffer.h:404

Returns the current read position.


available

const nodiscard

[[nodiscard]] size_t available() const

Defined in src/base/include/icy/buffer.h:408

Returns the number of elements between the current position and the limit.


begin

const inline nodiscard

[[nodiscard]] inline const char * begin() const

Defined in src/base/include/icy/buffer.h:411

Returns a pointer to the start of the buffer.


current

const inline nodiscard

[[nodiscard]] inline const char * current() const

Defined in src/base/include/icy/buffer.h:414

Returns a pointer to the current read position.


order

const inline

inline ByteOrder order() const

Defined in src/base/include/icy/buffer.h:417

Returns the byte order used for multi-byte integer reads.


toString

std::string toString()

Defined in src/base/include/icy/buffer.h:421

Returns the remaining unread bytes as a std::string.

Returns

String containing bytes from the current position to the end.

Protected Attributes

ReturnNameDescription
size_t_position
size_t_limit
ByteOrder_order
const char *_bytes

_position

size_t _position

Defined in src/base/include/icy/buffer.h:431


_limit

size_t _limit

Defined in src/base/include/icy/buffer.h:432


_order

ByteOrder _order

Defined in src/base/include/icy/buffer.h:433


_bytes

const char * _bytes

Defined in src/base/include/icy/buffer.h:434

Protected Methods

ReturnNameDescription
voidinit

init

void init(const char * bytes, size_t size, ByteOrder order)

Defined in src/base/include/icy/buffer.h:429