From 07b716c38625dd954be279e3476164b5bb1d6293 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 10 Jul 2021 22:01:30 -0400 Subject: Add serd_statement_matches() --- src/node.h | 8 ++++++++ src/statement.c | 14 ++++++++++++++ 2 files changed, 22 insertions(+) (limited to 'src') diff --git a/src/node.h b/src/node.h index 29164dc2..e064e96b 100644 --- a/src/node.h +++ b/src/node.h @@ -20,6 +20,7 @@ #include "exess/exess.h" #include "serd/serd.h" +#include #include #include @@ -49,6 +50,13 @@ serd_node_string_i(const SerdNode* const SERD_NONNULL node) return (const char*)(node + 1); } +static inline bool +serd_node_pattern_match(const SerdNode* SERD_NULLABLE a, + const SerdNode* SERD_NULLABLE b) +{ + return !a || !b || serd_node_equals(a, b); +} + SerdNode* SERD_ALLOCATED serd_node_malloc(size_t length, SerdNodeFlags flags, SerdNodeType type); diff --git a/src/statement.c b/src/statement.c index f3034566..d6571c6c 100644 --- a/src/statement.c +++ b/src/statement.c @@ -17,6 +17,7 @@ #include "statement.h" #include "caret.h" +#include "node.h" #include #include @@ -132,3 +133,16 @@ serd_statement_equals(const SerdStatement* const a, serd_node_equals(a->nodes[2], b->nodes[2]) && serd_node_equals(a->nodes[3], b->nodes[3]))); } + +bool +serd_statement_matches(const SerdStatement* const statement, + const SerdNode* const subject, + const SerdNode* const predicate, + const SerdNode* const object, + const SerdNode* const graph) +{ + return (serd_node_pattern_match(statement->nodes[0], subject) && + serd_node_pattern_match(statement->nodes[1], predicate) && + serd_node_pattern_match(statement->nodes[2], object) && + serd_node_pattern_match(statement->nodes[3], graph)); +} -- cgit v1.2.1