aboutsummaryrefslogtreecommitdiffstats
path: root/include/serd/stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/serd/stream.h')
-rw-r--r--include/serd/stream.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/include/serd/stream.h b/include/serd/stream.h
new file mode 100644
index 00000000..8b023add
--- /dev/null
+++ b/include/serd/stream.h
@@ -0,0 +1,62 @@
+// Copyright 2011-2022 David Robillard <d@drobilla.net>
+// SPDX-License-Identifier: ISC
+
+#ifndef SERD_STREAM_H
+#define SERD_STREAM_H
+
+#include "serd/attributes.h"
+
+#include <stddef.h>
+
+SERD_BEGIN_DECLS
+
+/**
+ @defgroup serd_stream Byte Stream Interface
+ @ingroup serd_reading_writing
+
+ These types define the interface for byte streams (generalized files) which
+ can be provided to read/write from/to any custom source/sink. It is
+ directly compatible with the standard C `FILE` API, so the standard library
+ functions may be used directly.
+
+ @{
+*/
+
+/**
+ Function to detect I/O stream errors.
+
+ Identical semantics to `ferror`.
+
+ @return Non-zero if `stream` has encountered an error.
+*/
+typedef int (*SerdStreamErrorFunc)(void* SERD_NONNULL stream);
+
+/**
+ Source function for raw string input.
+
+ Identical semantics to `fread`, but may set errno for more informative error
+ reporting than supported by SerdStreamErrorFunc.
+
+ @param buf Output buffer.
+ @param size Size of a single element of data in bytes (always 1).
+ @param nmemb Number of elements to read.
+ @param stream Stream to read from (FILE* for fread).
+ @return Number of elements (bytes) read.
+*/
+typedef size_t (*SerdSource)(void* SERD_NONNULL buf,
+ size_t size,
+ size_t nmemb,
+ void* SERD_NONNULL stream);
+
+/// Sink function for raw string output
+typedef size_t (*SerdSink)(const void* SERD_NONNULL buf,
+ size_t len,
+ void* SERD_NONNULL stream);
+
+/**
+ @}
+*/
+
+SERD_END_DECLS
+
+#endif // SERD_STREAM_H