Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_stream.h
Go to the documentation of this file.
1
14#ifndef VL_STREAM_H
15#define VL_STREAM_H
16
17#include <vl/vl_atomic.h>
18#include <vl/vl_memory.h>
19#include <vl/vl_mutex.h>
20
25typedef enum vl_stream_origin_
26{
27 VL_STREAM_SEEK_SET = 0,
28 VL_STREAM_SEEK_CUR = 1,
29 VL_STREAM_SEEK_END = 2
30} vl_stream_origin;
31
32// Function Pointer Definitions
33typedef vl_memsize_t (*vl_stream_func_read)(void* buffer, vl_memsize_t size, void* user);
34typedef vl_memsize_t (*vl_stream_func_write)(const void* buffer, vl_memsize_t size, void* user);
35typedef vl_bool_t (*vl_stream_func_seek)(vl_int64_t offset, vl_stream_origin origin, void* user);
36typedef vl_int64_t (*vl_stream_func_tell)(void* user);
37typedef void (*vl_stream_func_flush)(void* user);
38typedef void (*vl_stream_func_close)(void* user);
39
76typedef struct vl_stream_
77{
83
89
94
99
104
109
116 void* userData;
117
122
128 vl_atomic_ularge_t refCount;
129
133 vl_atomic_ularge_t totalRead;
134
138 vl_atomic_ularge_t totalWritten;
139} vl_stream;
140
157VL_API vl_stream* vlStreamNew(void* userData);
158
177VL_API void vlStreamDelete(vl_stream* stream);
178
194VL_API void vlStreamRetain(vl_stream* stream);
195
196//-----------------------------------------------------------------------------
197// V-Table Configuration (Setters)
198//-----------------------------------------------------------------------------
199
200VL_API void vlStreamSetRead(vl_stream* stream, vl_stream_func_read func);
201VL_API void vlStreamSetWrite(vl_stream* stream, vl_stream_func_write func);
202VL_API void vlStreamSetSeek(vl_stream* stream, vl_stream_func_seek func);
203VL_API void vlStreamSetTell(vl_stream* stream, vl_stream_func_tell func);
204VL_API void vlStreamSetFlush(vl_stream* stream, vl_stream_func_flush func);
205VL_API void vlStreamSetClose(vl_stream* stream, vl_stream_func_close func);
206
207//-----------------------------------------------------------------------------
208// I/O Operations (Thread Safe)
209//-----------------------------------------------------------------------------
210
229VL_API vl_memsize_t vlStreamRead(vl_stream* stream, void* outBuffer, vl_memsize_t outLength);
230
250VL_API vl_memsize_t vlStreamWrite(vl_stream* stream, const void* inBuffer, vl_memsize_t inLength);
251
269VL_API vl_bool_t vlStreamSeek(vl_stream* stream, vl_int64_t offset, vl_stream_origin origin);
270
287VL_API vl_int64_t vlStreamTell(vl_stream* stream);
288
304VL_API void vlStreamFlush(vl_stream* stream);
305
306#endif // VL_STREAM_H
struct vl_mutex_ * vl_mutex
Definition vl_mutex.h:23
VL_BOOL_T vl_bool_t
Definition vl_numtypes.h:191
vl_stream_func_read read
Reads bytes from the stream into a buffer. Returns the number of bytes actually read.
Definition vl_stream.h:82
vl_stream_func_close close
Closes the stream backend and releases associated resources.
Definition vl_stream.h:108
VL_API void vlStreamSetClose(vl_stream *stream, vl_stream_func_close func)
Definition vl_stream.c:94
VL_API vl_stream * vlStreamNew(void *userData)
Creates a new stream object on the heap.
Definition vl_stream.c:4
vl_memsize_t(* vl_stream_func_read)(void *buffer, vl_memsize_t size, void *user)
Definition vl_stream.h:33
vl_stream_func_flush flush
Flushes any buffered data to the underlying medium.
Definition vl_stream.h:103
VL_API vl_int64_t vlStreamTell(vl_stream *stream)
Returns the current position in the stream.
Definition vl_stream.c:157
VL_API vl_memsize_t vlStreamWrite(vl_stream *stream, const void *inBuffer, vl_memsize_t inLength)
Writes data to the stream.
Definition vl_stream.c:124
vl_stream_func_tell tell
Returns the current stream position, or -1 if unsupported.
Definition vl_stream.h:98
VL_API vl_bool_t vlStreamSeek(vl_stream *stream, vl_int64_t offset, vl_stream_origin origin)
Moves the stream position.
Definition vl_stream.c:141
VL_API void vlStreamSetWrite(vl_stream *stream, vl_stream_func_write func)
Definition vl_stream.c:74
vl_atomic_ularge_t totalWritten
Total number of bytes successfully written to the stream.
Definition vl_stream.h:138
void(* vl_stream_func_close)(void *user)
Definition vl_stream.h:38
VL_API void vlStreamSetRead(vl_stream *stream, vl_stream_func_read func)
Definition vl_stream.c:69
VL_API void vlStreamDelete(vl_stream *stream)
Decrements reference count and potentially deletes the stream.
Definition vl_stream.c:37
vl_stream_func_seek seek
Moves the current stream position.
Definition vl_stream.h:93
vl_stream_func_write write
Writes bytes from a buffer to the stream. Returns the number of bytes actually written.
Definition vl_stream.h:88
vl_memsize_t(* vl_stream_func_write)(const void *buffer, vl_memsize_t size, void *user)
Definition vl_stream.h:34
vl_bool_t(* vl_stream_func_seek)(vl_int64_t offset, vl_stream_origin origin, void *user)
Definition vl_stream.h:35
vl_atomic_ularge_t totalRead
Total number of bytes successfully read from the stream.
Definition vl_stream.h:133
VL_API void vlStreamSetTell(vl_stream *stream, vl_stream_func_tell func)
Definition vl_stream.c:84
void(* vl_stream_func_flush)(void *user)
Definition vl_stream.h:37
VL_API void vlStreamFlush(vl_stream *stream)
Flushes any buffered data to the underlying device.
Definition vl_stream.c:173
vl_int64_t(* vl_stream_func_tell)(void *user)
Definition vl_stream.h:36
VL_API void vlStreamSetFlush(vl_stream *stream, vl_stream_func_flush func)
Definition vl_stream.c:89
vl_atomic_ularge_t refCount
Atomic reference count.
Definition vl_stream.h:128
VL_API void vlStreamRetain(vl_stream *stream)
Increments the reference count of the stream.
Definition vl_stream.c:31
void * userData
Backend-specific context pointer.
Definition vl_stream.h:116
VL_API void vlStreamSetSeek(vl_stream *stream, vl_stream_func_seek func)
Definition vl_stream.c:79
vl_mutex lock
Mutex protecting all I/O operations on this stream.
Definition vl_stream.h:121
VL_API vl_memsize_t vlStreamRead(vl_stream *stream, void *outBuffer, vl_memsize_t outLength)
Reads data from the stream.
Definition vl_stream.c:104
Generic, thread-safe byte stream abstraction.
Definition vl_stream.h:77