aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-06-03 19:47:07 +0200
committerDavid Robillard <d@drobilla.net>2020-10-27 13:13:58 +0100
commit897590f6408b9b2b1aae2a060465da6d0faf42be (patch)
tree488932c54be7e580b243780d78e126afc89bd8ec /src
parent995766383b56addc1144d885dd8ca5abc8587afa (diff)
downloadserd-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.c19
-rw-r--r--src/sink.c13
-rw-r--r--src/writer.c14
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;
diff --git a/src/sink.c b/src/sink.c
index d025520b..1c5c500f 100644
--- a/src/sink.c
+++ b/src/sink.c
@@ -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;