diff options
author | David Robillard <d@drobilla.net> | 2018-06-03 19:47:07 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-10-27 13:13:58 +0100 |
commit | 897590f6408b9b2b1aae2a060465da6d0faf42be (patch) | |
tree | 488932c54be7e580b243780d78e126afc89bd8ec /src | |
parent | 995766383b56addc1144d885dd8ca5abc8587afa (diff) | |
download | serd-897590f6408b9b2b1aae2a060465da6d0faf42be.tar.gz serd-897590f6408b9b2b1aae2a060465da6d0faf42be.tar.bz2 serd-897590f6408b9b2b1aae2a060465da6d0faf42be.zip |
Make statement sink take a statement rather than nodes
This makes the interface more extensible, towards associating more information
with statements. The serd_sink_write_nodes wrapper remains so that user code
does not need to allocate in order to write statement.
Diffstat (limited to 'src')
-rw-r--r-- | src/reader.c | 19 | ||||
-rw-r--r-- | src/sink.c | 13 | ||||
-rw-r--r-- | src/writer.c | 14 |
3 files changed, 23 insertions, 23 deletions
diff --git a/src/reader.c b/src/reader.c index 065a6040..1bca81ac 100644 --- a/src/reader.c +++ b/src/reader.c @@ -18,6 +18,7 @@ #include "system.h" #include "serd_internal.h" +#include "statement.h" #include "world.h" #include <errno.h> @@ -119,15 +120,15 @@ emit_statement(SerdReader* reader, ReadContext ctx, SerdNode* o) (subject and predicate) were already zeroed by subsequent pushes. */ serd_node_zero_pad(o); - const SerdStatus st = - !reader->sink->statement - ? SERD_SUCCESS - : reader->sink->statement(reader->sink->handle, - *ctx.flags, - graph, - ctx.subject, - ctx.predicate, - o); + const SerdStatement statement = { + { ctx.subject, ctx.predicate, o, graph } + }; + + const SerdStatus st = !reader->sink->statement + ? SERD_SUCCESS + : reader->sink->statement(reader->sink->handle, + *ctx.flags, + &statement); *ctx.flags &= SERD_ANON_CONT|SERD_LIST_CONT; // Preserve only cont flags return st; @@ -16,6 +16,8 @@ #include "serd/serd.h" +#include "statement.h" + SerdStatus serd_sink_write_base(const SerdSink* sink, const SerdNode* uri) { @@ -35,12 +37,7 @@ serd_sink_write_statement(const SerdSink* sink, const SerdStatementFlags flags, const SerdStatement* statement) { - return sink->statement(sink->handle, - flags, - serd_statement_graph(statement), - serd_statement_subject(statement), - serd_statement_predicate(statement), - serd_statement_object(statement)); + return sink->statement(sink->handle, flags, statement); } SerdStatus @@ -51,8 +48,8 @@ serd_sink_write(const SerdSink* sink, const SerdNode* object, const SerdNode* graph) { - return sink->statement( - sink->handle, flags, graph, subject, predicate, object); + const SerdStatement statement = { { subject, predicate, object, graph } }; + return sink->statement(sink->handle, flags, &statement); } SerdStatus diff --git a/src/writer.c b/src/writer.c index 5e2e2976..f376e86e 100644 --- a/src/writer.c +++ b/src/writer.c @@ -684,13 +684,15 @@ write_list_obj(SerdWriter* writer, } static SerdStatus -serd_writer_write_statement(SerdWriter* writer, - SerdStatementFlags flags, - const SerdNode* graph, - const SerdNode* subject, - const SerdNode* predicate, - const SerdNode* object) +serd_writer_write_statement(SerdWriter* writer, + SerdStatementFlags flags, + const SerdStatement* statement) { + const SerdNode* const subject = serd_statement_subject(statement); + const SerdNode* const predicate = serd_statement_predicate(statement); + const SerdNode* const object = serd_statement_object(statement); + const SerdNode* const graph = serd_statement_graph(statement); + if (!subject || !predicate || !object || !is_resource(subject) || !is_resource(predicate)) { return SERD_ERR_BAD_ARG; |