From 7f0ebf206c3654e66b1ad40450d54253f7bfd17f Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 30 Jul 2016 19:04:39 -0400 Subject: Add lv2_features_data() and lv2_features_query() This adds a new header lv2/lv2plug.in/ns/lv2core/lv2_util.h for utility functions useful with core LV2. --- lv2/lv2plug.in/ns/lv2core/lv2_util.h | 101 +++++++++++++++++++++++++++++ lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl | 9 +++ lv2/lv2plug.in/ns/lv2core/lv2core.ttl | 1 + lv2/lv2plug.in/ns/lv2core/manifest.ttl | 4 +- lv2/lv2plug.in/ns/meta/meta.ttl | 4 +- 5 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 lv2/lv2plug.in/ns/lv2core/lv2_util.h (limited to 'lv2/lv2plug.in/ns') diff --git a/lv2/lv2plug.in/ns/lv2core/lv2_util.h b/lv2/lv2plug.in/ns/lv2core/lv2_util.h new file mode 100644 index 0000000..038b5a6 --- /dev/null +++ b/lv2/lv2plug.in/ns/lv2core/lv2_util.h @@ -0,0 +1,101 @@ +/* + Copyright 2016 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @defgroup util Utilities + @ingroup lv2core + @{ +*/ + +#include + +#include "lv2/lv2plug.in/ns/lv2core/lv2.h" + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** + Return the data for a feature in a features array. + + If the feature is not found, NULL is returned. Note that this function is + only useful for features with data, and can not detect features that are + present but have NULL data. +*/ +static inline void* +lv2_features_data(const LV2_Feature*const* features, + const char* const uri) +{ + for (const LV2_Feature*const* f = features; *f; ++f) { + if (!strcmp(uri, (*f)->URI)) { + return (*f)->data; + } + } + return NULL; +} + +/** + Query a features array. + + This function allows getting several features in one call, and detect + missing required features, with the same caveat of lv2_features_data(). + + The arguments should be a series of const char* uri, void** data, bool + required, terminated by a NULL URI. The data pointers MUST be initialized + to NULL. For example: + + @code + LV2_URID_Log* log = NULL; + LV2_URID_Map* map = NULL; + const char* missing = lv2_features_query( + features, + LV2_LOG__log, &log, false, + LV2_URID__map, &map, true, + NULL); + @endcode + + @return NULL on success, otherwise the URI of this missing feature. +*/ +static inline const char* +lv2_features_query(const LV2_Feature* const* features, ...) +{ + va_list args; + va_start(args, features); + + const char* uri = NULL; + while ((uri = va_arg(args, const char*))) { + void** data = va_arg(args, void**); + bool required = va_arg(args, int); + + *data = lv2_features_data(features, uri); + if (required && !*data) { + return uri; + } + } + + return NULL; +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/** + @} + @} +*/ diff --git a/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl b/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl index 2e74227..3768faf 100644 --- a/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl +++ b/lv2/lv2plug.in/ns/lv2core/lv2core.doap.ttl @@ -16,6 +16,15 @@ ; doap:maintainer ; doap:release [ + doap:revision "13.1" ; + doap:created "2016-07-30" ; + dcs:blame ; + dcs:changeset [ + dcs:item [ + rdfs:label "Add lv2_util.h with lv2_features_data() and lv2_features_query()." + ] + ] + ] , [ doap:revision "12.4" ; doap:created "2015-04-07" ; doap:file-release ; diff --git a/lv2/lv2plug.in/ns/lv2core/lv2core.ttl b/lv2/lv2plug.in/ns/lv2core/lv2core.ttl index d08d063..1980f37 100644 --- a/lv2/lv2plug.in/ns/lv2core/lv2core.ttl +++ b/lv2/lv2plug.in/ns/lv2core/lv2core.ttl @@ -38,6 +38,7 @@ devices). See a owl:Ontology ; rdfs:seeAlso , + , , <../meta/meta.ttl> ; lv2:documentation """ diff --git a/lv2/lv2plug.in/ns/lv2core/manifest.ttl b/lv2/lv2plug.in/ns/lv2core/manifest.ttl index 2995826..916b596 100644 --- a/lv2/lv2plug.in/ns/lv2core/manifest.ttl +++ b/lv2/lv2plug.in/ns/lv2core/manifest.ttl @@ -4,6 +4,6 @@ a lv2:Specification ; - lv2:minorVersion 12 ; - lv2:microVersion 4 ; + lv2:minorVersion 13 ; + lv2:microVersion 1 ; rdfs:seeAlso . diff --git a/lv2/lv2plug.in/ns/meta/meta.ttl b/lv2/lv2plug.in/ns/meta/meta.ttl index a3c21fb..4725a50 100644 --- a/lv2/lv2plug.in/ns/meta/meta.ttl +++ b/lv2/lv2plug.in/ns/meta/meta.ttl @@ -46,8 +46,8 @@ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH R meta:kfoltman , meta:paniq ; doap:release [ - doap:revision "1.12.1" ; - doap:created "2015-10-24" ; + doap:revision "1.13.1" ; + doap:created "2016-07-31" ; dcs:blame ; dcs:changeset [ dcs:item [ -- cgit v1.2.1