From 9fd4ff5a6470f58916d7cd8578bcb839f9b5feaa Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 29 Apr 2018 15:24:05 +0200 Subject: Add SerdWorld for shared library state --- serd/serd.h | 71 +++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 26 deletions(-) (limited to 'serd') diff --git a/serd/serd.h b/serd/serd.h index 5270c15f..8744b634 100644 --- a/serd/serd.h +++ b/serd/serd.h @@ -54,6 +54,13 @@ extern "C" { @{ */ +/** + World. + + The World represents all library state shared between various objects. +*/ +typedef struct SerdWorldImpl SerdWorld; + /** Environment. @@ -721,6 +728,41 @@ typedef struct SerdSink { SerdEndSink end; } SerdSink; +/** + @} + @name World + @{ +*/ + +/** + Create a new Serd World. + + It is safe to use multiple worlds in one process, though no objects can be + shared between worlds. +*/ +SERD_API +SerdWorld* +serd_world_new(void); + +/** + Free `world`. +*/ +SERD_API +void +serd_world_free(SerdWorld* world); + +/** + Set a function to be called when errors occur. + + The `error_sink` will be called with `handle` as its first argument. If + no error function is set, errors are printed to stderr. +*/ +SERD_API +void +serd_world_set_error_sink(SerdWorld* world, + SerdErrorSink error_sink, + void* handle); + /** @} @name Environment @@ -828,7 +870,7 @@ serd_env_foreach(const SerdEnv* env, */ SERD_API SerdReader* -serd_reader_new(SerdSyntax syntax, const SerdSink* sink); +serd_reader_new(SerdWorld* world, SerdSyntax syntax, const SerdSink* sink); /** Enable or disable strict parsing. @@ -841,18 +883,6 @@ SERD_API void serd_reader_set_strict(SerdReader* reader, bool strict); -/** - Set a function to be called when errors occur during reading. - - The `error_sink` will be called with `handle` as its first argument. If - no error function is set, errors are printed to stderr in GCC style. -*/ -SERD_API -void -serd_reader_set_error_sink(SerdReader* reader, - SerdErrorSink error_sink, - void* error_handle); - /** Set a prefix to be added to all blank node identifiers. @@ -964,7 +994,8 @@ serd_reader_free(SerdReader* reader); */ SERD_API SerdWriter* -serd_writer_new(SerdSyntax syntax, +serd_writer_new(SerdWorld* world, + SerdSyntax syntax, SerdStyle style, SerdEnv* env, const SerdURI* base_uri, @@ -1014,18 +1045,6 @@ SERD_API char* serd_buffer_sink_finish(SerdBuffer* stream); -/** - Set a function to be called when errors occur during writing. - - The `error_sink` will be called with `handle` as its first argument. If - no error function is set, errors are printed to stderr. -*/ -SERD_API -void -serd_writer_set_error_sink(SerdWriter* writer, - SerdErrorSink error_sink, - void* error_handle); - /** Set a prefix to be removed from matching blank node identifiers. */ -- cgit v1.2.1