From 056f394151a48e9d129691fd7451a3d0bcbde3ba Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 3 Sep 2006 05:11:57 +0000 Subject: Saner (internal) query API, though still needs work. Preliminary (untested) support for host features/extensions/whatever. Documentation fixes and minor cleanups. git-svn-id: http://svn.drobilla.net/lad/libslv2@113 a436a847-0d15-0410-975c-d299462d15a1 --- src/plugin.c | 110 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 76 insertions(+), 34 deletions(-) (limited to 'src/plugin.c') diff --git a/src/plugin.c b/src/plugin.c index a024077..65903da 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -130,7 +130,6 @@ SLV2Property slv2_plugin_get_property(const SLV2Plugin* p, const char* property) { - assert(p); assert(property); /* @@ -147,19 +146,13 @@ slv2_plugin_get_property(const SLV2Plugin* p, free(header); free(lang_filter);*/ - rasqal_init(); - char* query = strjoin( "SELECT DISTINCT ?value FROM data: WHERE { \n" "plugin: ", property, " ?value . \n" "} \n", NULL); - rasqal_query_results* results = slv2_plugin_run_query(p, query); + SLV2Property result = slv2_query_get_results(p, query, "value"); - SLV2Property result = slv2_query_get_results(results, "value"); - - rasqal_free_query_results(results); - rasqal_finish(); free(query); return result; @@ -169,54 +162,45 @@ slv2_plugin_get_property(const SLV2Plugin* p, uint32_t slv2_plugin_get_num_ports(const SLV2Plugin* p) { - rasqal_init(); - char* query = strjoin( "SELECT DISTINCT ?value FROM data: WHERE { \n" "plugin: lv2:port ?value . \n" "} \n", NULL); - rasqal_query_results* results = slv2_plugin_run_query(p, query); - const size_t result = slv2_query_get_num_results(results, "value"); + SLV2Property results = slv2_query_get_results(p, query, "value"); + + size_t count = results->num_values; - rasqal_free_query_results(results); - rasqal_finish(); free(query); + slv2_property_free(results); - return result; + return count; } bool slv2_plugin_has_latency(const SLV2Plugin* p) { - assert(p); - - rasqal_init(); - char* query = "SELECT DISTINCT ?value FROM data: WHERE { \n" " plugin: lv2:port ?port . \n" " ?port lv2:portHint lv2:reportsLatency . \n" "}\n"; - rasqal_query_results* results = slv2_plugin_run_query(p, query); - bool result = ( rasqal_query_results_get_bindings_count(results) > 0 ); + SLV2Property results = slv2_query_get_results(p, query, "port"); + + bool exists = (results->num_values > 0); - rasqal_free_query_results(results); - rasqal_finish(); - free(query); + free(query); + slv2_property_free(results); - return result; + return exists; } + uint32_t slv2_plugin_get_latency_port(const SLV2Plugin* p) { - assert(p); - - rasqal_init(); - char* query = "SELECT DISTINCT ?value FROM data: WHERE { \n" " plugin: lv2:port ?port . \n" @@ -224,9 +208,7 @@ slv2_plugin_get_latency_port(const SLV2Plugin* p) " lv2:index ?index . \n" "}\n"; - rasqal_query_results* results = slv2_plugin_run_query(p, query); - - struct _Property* result = slv2_query_get_results(results, "index"); + SLV2Property result = slv2_query_get_results(p, query, "index"); // FIXME: need a sane error handling strategy assert(result->num_values == 1); @@ -234,10 +216,70 @@ slv2_plugin_get_latency_port(const SLV2Plugin* p) uint32_t index = strtol(result->values[0], &endptr, 10); // FIXME: check.. stuff.. - rasqal_free_query_results(results); - rasqal_finish(); free(query); return index; } +/* +bool +slv2_plugin_supports_feature(const SLV2Plugin* p, const char* feature_uri) +{ +} + + +bool +slv2_plugin_requires_feature(const SLV2Plugin* p, const char* feature_uri) +{ +} +*/ + +SLV2Property +slv2_plugin_get_supported_features(const SLV2Plugin* p) +{ + char* query = + "SELECT DISTINCT ?feature FROM data: WHERE { \n" + " { plugin: lv2:requiredHostFeature ?feature } \n" + " UNION \n" + " { plugin: lv2:supportedHostFeature ?feature } \n" + "}\n"; + + SLV2Property result = slv2_query_get_results(p, query, "feature"); + + free(query); + + return result; +} + + +SLV2Property +slv2_plugin_get_optional_features(const SLV2Plugin* p) +{ + char* query = + "SELECT DISTINCT ?feature FROM data: WHERE { \n" + " plugin: lv2:supportedHostFeature ?feature . \n" + "}\n"; + + SLV2Property result = slv2_query_get_results(p, query, "feature"); + + free(query); + + return result; +} + + +SLV2Property +slv2_plugin_get_required_features(const SLV2Plugin* p) +{ + char* query = + "SELECT DISTINCT ?feature FROM data: WHERE { \n" + " plugin: lv2:requiredHostFeature ?feature . \n" + "}\n"; + + SLV2Property result = slv2_query_get_results(p, query, "feature"); + + free(query); + + return result; +} + -- cgit v1.2.1