summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-11-23 02:36:26 +0000
committerDavid Robillard <d@drobilla.net>2012-11-23 02:36:26 +0000
commitf7963514ecc6b09717e5a5b49845cb0043145e37 (patch)
tree2abc5e87919893e554b30314ad04d0137fab2672 /src
parent3a779910b25092981e7dd84d976987e7556916a4 (diff)
downloadlilv-f7963514ecc6b09717e5a5b49845cb0043145e37.tar.gz
lilv-f7963514ecc6b09717e5a5b49845cb0043145e37.tar.bz2
lilv-f7963514ecc6b09717e5a5b49845cb0043145e37.zip
Factor out common "ask if a triple is present" pattern.
git-svn-id: http://svn.drobilla.net/lad/trunk/lilv@4856 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src')
-rw-r--r--src/lilv_internal.h6
-rw-r--r--src/plugin.c15
-rw-r--r--src/port.c20
-rw-r--r--src/world.c9
4 files changed, 21 insertions, 29 deletions
diff --git a/src/lilv_internal.h b/src/lilv_internal.h
index f23b7a2..60dae6a 100644
--- a/src/lilv_internal.h
+++ b/src/lilv_internal.h
@@ -310,6 +310,12 @@ lilv_world_query_internal(LilvWorld* world,
const SordNode* predicate,
const SordNode* object);
+bool
+lilv_world_ask_internal(LilvWorld* world,
+ const SordNode* subject,
+ const SordNode* predicate,
+ const SordNode* object);
+
LilvNodes*
lilv_world_query_values_internal(LilvWorld* world,
const SordNode* subject,
diff --git a/src/plugin.c b/src/plugin.c
index 758790b..4decba7 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -719,18 +719,11 @@ lilv_plugin_has_extension_data(const LilvPlugin* p,
return false;
}
- SordIter* iter = lilv_world_query_internal(
+ return lilv_world_ask_internal(
p->world,
p->plugin_uri->node,
p->world->uris.lv2_extensionData,
uri->node);
-
- if (iter) {
- sord_iter_free(iter);
- return true;
- } else {
- return false;
- }
}
LILV_API
@@ -951,14 +944,12 @@ lilv_plugin_get_related(const LilvPlugin* plugin, const LilvNode* type)
LilvNodes* matches = lilv_nodes_new();
LILV_FOREACH(nodes, i, related) {
LilvNode* node = (LilvNode*)lilv_collection_get((ZixTree*)related, i);
- SordIter* titer = lilv_world_query_internal(
- world, node->node, world->uris.rdf_a, type->node);
- if (!sord_iter_end(titer)) {
+ if (lilv_world_ask_internal(
+ world, node->node, world->uris.rdf_a, type->node)) {
zix_tree_insert((ZixTree*)matches,
lilv_node_new_from_node(world, node->node),
NULL);
}
- sord_iter_free(titer);
}
lilv_nodes_free(related);
diff --git a/src/port.c b/src/port.c
index 43e5708..782ca60 100644
--- a/src/port.c
+++ b/src/port.c
@@ -68,16 +68,11 @@ lilv_port_has_property(const LilvPlugin* p,
const LilvPort* port,
const LilvNode* property)
{
- assert(property);
- SordIter* results = lilv_world_query_internal(
+ return lilv_world_ask_internal(
p->world,
port->node,
p->world->uris.lv2_portProperty,
lilv_node_as_node(property));
-
- const bool ret = !sord_iter_end(results);
- sord_iter_free(results);
- return ret;
}
LILV_API
@@ -86,16 +81,11 @@ lilv_port_supports_event(const LilvPlugin* p,
const LilvPort* port,
const LilvNode* event)
{
- assert(event);
- SordIter* results = lilv_world_query_internal(
+ return lilv_world_ask_internal(
p->world,
port->node,
sord_new_uri(p->world->world, (const uint8_t*)LV2_EVENT__supportsEvent),
lilv_node_as_node(event));
-
- const bool ret = !sord_iter_end(results);
- sord_iter_free(results);
- return ret;
}
static LilvNodes*
@@ -103,15 +93,11 @@ lilv_port_get_value_by_node(const LilvPlugin* p,
const LilvPort* port,
const SordNode* predicate)
{
- assert(sord_node_get_type(predicate) == SORD_URI);
-
- SordIter* results = lilv_world_query_internal(
+ return lilv_world_query_values_internal(
p->world,
port->node,
predicate,
NULL);
-
- return lilv_nodes_from_stream_objects(p->world, results, SORD_OBJECT);
}
LILV_API
diff --git a/src/world.c b/src/world.c
index b34cf3c..afa3422 100644
--- a/src/world.c
+++ b/src/world.c
@@ -221,6 +221,15 @@ lilv_world_query_internal(LilvWorld* world,
return sord_search(world->model, subject, predicate, object, NULL);
}
+bool
+lilv_world_ask_internal(LilvWorld* world,
+ const SordNode* subject,
+ const SordNode* predicate,
+ const SordNode* object)
+{
+ return sord_ask(world->model, subject, predicate, object, NULL);
+}
+
LilvNodes*
lilv_world_query_values_internal(LilvWorld* world,
const SordNode* subject,