fpi-byte-writer: Add APIs to write and get GBytes

It makes it handier to handle data elements without having to keep size
and data separated
This commit is contained in:
Marco Trevisan (Treviño)
2026-06-08 14:11:09 +02:00
committed by Marco Trevisan
parent 9c140036e9
commit 14763d29cf
3 changed files with 63 additions and 0 deletions
+2
View File
@@ -220,11 +220,13 @@ fpi_byte_writer_init
fpi_byte_writer_init_with_size
fpi_byte_writer_init_with_data
fpi_byte_writer_reset
fpi_byte_writer_reset_and_get_bytes
fpi_byte_writer_reset_and_get_data
fpi_byte_writer_free
fpi_byte_writer_free_and_get_data
fpi_byte_writer_get_remaining
fpi_byte_writer_ensure_free_space
fpi_byte_writer_put_bytes
fpi_byte_writer_put_uint8
fpi_byte_writer_put_uint16_be
fpi_byte_writer_put_uint24_be
+39
View File
@@ -219,6 +219,36 @@ fpi_byte_writer_reset_and_get_data (FpiByteWriter * writer)
return data;
}
/**
* fpi_byte_writer_reset_and_get_bytes:
* @writer: #FpiByteWriter instance
*
* Resets @writer and returns the current data as a #GBytes.
*
* Returns: (transfer full): the current data as a #GBytes.
*/
GBytes *
fpi_byte_writer_reset_and_get_bytes (FpiByteWriter * writer)
{
GBytes *bytes;
g_return_val_if_fail (writer != NULL, NULL);
if (!writer->owned)
{
bytes = g_bytes_new (g_steal_pointer (&writer->parent.data),
writer->parent.size);
}
else
{
bytes = g_bytes_new_take ((gpointer) g_steal_pointer (&writer->parent.data),
writer->parent.size);
}
fpi_byte_writer_reset (writer);
return g_steal_pointer (&bytes);
}
/**
* fpi_byte_writer_free:
* @writer: (in) (transfer full): #FpiByteWriter instance
@@ -602,6 +632,15 @@ CREATE_WRITE_STRING_FUNC (32, guint32);
*
* Returns: %TRUE if the value could be written
*/
/**
* fpi_byte_writer_put_bytes:
* @writer: #FpiByteWriter instance
* @bytes: (transfer none): Data to write
*
* Writes the contents of @bytes to @writer.
*
* Returns: %TRUE if the value could be written
*/
/**
* fpi_byte_writer_fill:
* @writer: #FpiByteWriter instance
+22
View File
@@ -77,6 +77,9 @@ void fpi_byte_writer_reset (FpiByteWriter *writer);
guint8 * fpi_byte_writer_reset_and_get_data (FpiByteWriter *writer);
GBytes * fpi_byte_writer_reset_and_get_bytes (FpiByteWriter *writer);
/**
* fpi_byte_writer_get_pos:
* @writer: #FpiByteWriter instance
@@ -204,6 +207,9 @@ gboolean fpi_byte_writer_put_float64_le (FpiByteWriter *writer, gdoubl
gboolean fpi_byte_writer_put_data (FpiByteWriter *writer, const guint8 *data, guint size);
gboolean fpi_byte_writer_put_bytes (FpiByteWriter *writer, const GBytes *bytes);
gboolean fpi_byte_writer_fill (FpiByteWriter *writer, guint8 value, guint size);
@@ -338,6 +344,18 @@ fpi_byte_writer_put_data_inline (FpiByteWriter * writer, const guint8 * data,
return TRUE;
}
static inline gboolean
fpi_byte_writer_put_bytes_inline (FpiByteWriter * writer, const GBytes * bytes)
{
g_return_val_if_fail (writer != NULL, FALSE);
g_return_val_if_fail (bytes != NULL, FALSE);
const guint8 *data;
gsize size;
data = g_bytes_get_data ((GBytes *) bytes, &size);
return fpi_byte_writer_put_data_inline (writer, data, size);
}
static inline void
fpi_byte_writer_fill_unchecked (FpiByteWriter * writer, guint8 value, guint size)
{
@@ -413,6 +431,10 @@ fpi_byte_writer_fill_inline (FpiByteWriter * writer, guint8 value, guint size)
#define fpi_byte_writer_put_data(writer, data, size) \
G_LIKELY (fpi_byte_writer_put_data_inline (writer, data, size))
#define fpi_byte_writer_put_data_static(writer, data) \
G_LIKELY (fpi_byte_writer_put_data_inline (writer, data, sizeof (data)))
#define fpi_byte_writer_put_bytes(writer, bytes) \
G_LIKELY (fpi_byte_writer_put_bytes_inline (writer, bytes))
#define fpi_byte_writer_fill(writer, val, size) \
G_LIKELY (fpi_byte_writer_fill_inline (writer, val, size))