// 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"); }