| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #pragma once
- #include "stream.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef struct StreamCache StreamCache;
- /**
- * Allocate stream cache.
- * @return StreamCache* pointer to a StreamCache instance
- */
- StreamCache* stream_cache_alloc();
- /**
- * Free stream cache.
- * @param cache Pointer to a StreamCache instance
- */
- void stream_cache_free(StreamCache* cache);
- /**
- * Drop the cache contents and set it to initial state.
- * @param cache Pointer to a StreamCache instance
- */
- void stream_cache_drop(StreamCache* cache);
- /**
- * Determine if the internal cursor is at end the end of cached data.
- * @param cache Pointer to a StreamCache instance
- * @return True if cursor is at end, otherwise false.
- */
- bool stream_cache_at_end(StreamCache* cache);
- /**
- * Get the current size of cached data.
- * @param cache Pointer to a StreamCache instance
- * @return Size of cached data.
- */
- size_t stream_cache_size(StreamCache* cache);
- /**
- * Get the internal cursor position.
- * @param cache Pointer to a StreamCache instance
- * @return Cursor position inside the cache.
- */
- size_t stream_cache_pos(StreamCache* cache);
- /**
- * Load the cache with new data from a stream.
- * @param cache Pointer to a StreamCache instance
- * @param stream Pointer to a Stream instance
- * @return Size of newly cached data.
- */
- size_t stream_cache_fill(StreamCache* cache, Stream* stream);
- /**
- * Write as much cached data as possible to a stream.
- * @param cache Pointer to a StreamCache instance
- * @param stream Pointer to a Stream instance
- * @return True on success, False on failure.
- */
- bool stream_cache_flush(StreamCache* cache, Stream* stream);
- /**
- * Read cached data and advance the internal cursor.
- * @param cache Pointer to a StreamCache instance.
- * @param data Pointer to a data buffer. Must be initialized.
- * @param size Maximum size in bytes to read from the cache.
- * @return Actual size that was read.
- */
- size_t stream_cache_read(StreamCache* cache, uint8_t* data, size_t size);
- /**
- * Write to cached data and advance the internal cursor.
- * @param cache Pointer to a StreamCache instance.
- * @param data Pointer to a data buffer.
- * @param size Maximum size in bytes to write to the cache.
- * @return Actual size that was written.
- */
- size_t stream_cache_write(StreamCache* cache, const uint8_t* data, size_t size);
- /**
- * Move the internal cursor relatively to its current position.
- * @param cache Pointer to a StreamCache instance.
- * @param offset Cursor offset.
- * @return Actual cursor offset. Equal to offset parameter on hit.
- */
- int32_t stream_cache_seek(StreamCache* cache, int32_t offset);
- #ifdef __cplusplus
- }
- #endif
|