Add stream structure and utilities

This commit is contained in:
2026-08-30 02:18:30 +01:00
parent a51686c8f0
commit c1b2e29c07
9 changed files with 237 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
// vim:fileencoding=utf-8:foldmethod=marker
#include "stream.h"
#include "../../common/aliases/aliases.h"
#include "../../common/assert/assert.h"
void _streamValidate(const WpStream *stream, u64 item_size);
b8 _streamAtEnd(const WpStream *stream, u64 item_size) {
_streamValidate(stream, item_size);
return stream->position >= stream->count;
}
b8 _streamHasNext(const WpStream *stream, u64 item_size) {
_streamValidate(stream, item_size);
return stream->position + 1 < stream->count;
}
void *_streamPeek(const WpStream *stream, u64 item_size) {
if (_streamHasNext(stream, item_size)) {
u64 index = (stream->position + 1) * stream->item_size;
return (void *)(&((u8 *)(stream->data))[index]);
}
return NULL;
}
void *_streamConsume(WpStream *stream, u64 item_size) {
if (!_streamAtEnd(stream, item_size)) {
u64 index = stream->position++ * stream->item_size;
return (void *)(&((u8 *)(stream->data))[index]);
}
return NULL;
}
void _streamValidate(const WpStream *stream, u64 item_size) {
wpDebugAssert(stream != NULL, "`stream` should not be NULL");
wpRuntimeAssert(stream->item_size == item_size, "Invalid item type provided");
}