Files
cKit/Foundation/c_BinaryInStream.h
2026-09-07 21:22:01 +08:00

42 lines
1.8 KiB
C

#ifndef INCLUDED_C_BINARYINSTREAM_H
#define INCLUDED_C_BINARYINSTREAM_H
#ifndef INCLUDED_C_INSTREAM_H
#include <c_InStream.h>
#endif /*INCLUDED_C_INSTREAM_H*/
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
typedef struct {
c_InStream_t* base_io; /* Underlying core polymorphically bound I/O driver ports backend link */
int buffer; /* 8-bit cache buffer of bits read in */
int n; /* Number of bits currently remaining active/unread in buffer */
} c_BinaryInStream_t;
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
c_err_t c_BinaryInStream_Init(c_BinaryInStream_t* self, c_InStream_t* underlying_io_port);
c_err_t c_BinaryInStream_ReadBits(c_BinaryInStream_t* self, int bit_count, uint32_t* out_value);
c_err_t c_BinaryInStream_ReadBit(c_BinaryInStream_t* self, int* out_bit);
c_err_t c_BinaryInStream_ReadByte(c_BinaryInStream_t* self, int* out_byte);
c_err_t c_BinaryInStream_ReadChar(c_BinaryInStream_t* self, char* out_char);
c_err_t c_BinaryInStream_ReadUInt16(c_BinaryInStream_t* self, uint16_t* out_x);
c_err_t c_BinaryInStream_ReadUInt32(c_BinaryInStream_t* self, uint32_t* out_x);
c_err_t c_BinaryInStream_ReadUInt64(c_BinaryInStream_t* self, uint64_t* out_x);
c_err_t c_BinaryInStream_ReadFloat(c_BinaryInStream_t* self, float* out_x);
c_err_t c_BinaryInStream_ReadDouble(c_BinaryInStream_t* self, double* out_x);
/**
* @brief Reads a null-terminated string out from the binary stream.
* @param buffer_cap Maximum threshold size limit matching out_buffer allocation bounds to prevent overflows.
*/
c_err_t c_BinaryInStream_ReadString(c_BinaryInStream_t* self, char* out_buffer, c_size_t buffer_cap);
#endif /*INCLUDED_C_BINARYINSTREAM_H*/