From 0aff74b23f4d85d7f157f25d399c14b6a78e998b Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 15 Jun 2018 15:15:55 -0400 Subject: Make SerdSink opaque --- serd/serd.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 52 insertions(+), 11 deletions(-) (limited to 'serd/serd.h') diff --git a/serd/serd.h b/serd/serd.h index be3ea586..deef03da 100644 --- a/serd/serd.h +++ b/serd/serd.h @@ -102,6 +102,11 @@ typedef struct SerdReaderImpl SerdReader; */ typedef struct SerdWriterImpl SerdWriter; +/** + An interface that receives a stream of RDF data. +*/ +typedef struct SerdSinkImpl SerdSink; + /** Return status code. */ @@ -830,17 +835,6 @@ typedef SerdStatus (*SerdStatementSink)(void* handle, typedef SerdStatus (*SerdEndSink)(void* handle, const SerdNode* node); -/** - An interface that receives a stream of RDF data. -*/ -typedef struct SerdSink { - void* handle; - SerdBaseSink base; - SerdPrefixSink prefix; - SerdStatementSink statement; - SerdEndSink end; -} SerdSink; - /** @} @name World @@ -969,6 +963,53 @@ serd_env_foreach(const SerdEnv* env, @{ */ +/** + Create a new sink. + + Initially, the sink has no set functions and will do nothing. Use the + serd_sink_set_*_func functions to set handlers for various events. + + @param handle Opaque handle that will be passed to sink functions. +*/ +SERD_API +SerdSink* +serd_sink_new(void* handle); + +/** + Free `sink`. +*/ +SERD_API +void +serd_sink_free(SerdSink* sink); + +/** + Set a function to be called when the base URI changes. +*/ +SERD_API +SerdStatus +serd_sink_set_base_func(SerdSink* sink, SerdBaseSink base_func); + +/** + Set a function to be called when a namespace prefix is defined. +*/ +SERD_API +SerdStatus +serd_sink_set_prefix_func(SerdSink* sink, SerdPrefixSink prefix_func); + +/** + Set a function to be called when a statement is emitted. +*/ +SERD_API +SerdStatus +serd_sink_set_statement_func(SerdSink* sink, SerdStatementSink statement_func); + +/** + Set a function to be called when an anonymous node ends. +*/ +SERD_API +SerdStatus +serd_sink_set_end_func(SerdSink* sink, SerdEndSink end_func); + /** Set the base URI. -- cgit v1.2.1