From c625507d8a3101742c083dd030cbd1e1e295a9a0 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 19 Apr 2007 18:29:16 +0000 Subject: Renamed SLV2Model SLV2World. Updated Ingen for SLV2 API changes. git-svn-id: http://svn.drobilla.net/lad/slv2@459 a436a847-0d15-0410-975c-d299462d15a1 --- slv2/Makefile.am | 2 +- slv2/model.h | 166 ------------------------------------------------------ slv2/plugin.h | 8 +-- slv2/pluginlist.h | 2 +- slv2/slv2.h | 2 +- slv2/types.h | 2 +- slv2/world.h | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 174 insertions(+), 174 deletions(-) delete mode 100644 slv2/model.h create mode 100644 slv2/world.h (limited to 'slv2') diff --git a/slv2/Makefile.am b/slv2/Makefile.am index 2c69aef..e20cde8 100644 --- a/slv2/Makefile.am +++ b/slv2/Makefile.am @@ -4,7 +4,7 @@ slv2include_HEADERS = \ lv2.h \ types.h \ slv2.h \ - model.h \ + world.h \ plugin.h \ port.h \ pluginlist.h \ diff --git a/slv2/model.h b/slv2/model.h deleted file mode 100644 index 4db1b2f..0000000 --- a/slv2/model.h +++ /dev/null @@ -1,166 +0,0 @@ -/* SLV2 - * Copyright (C) 2007 Dave Robillard - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef __SLV2_MODEL_H__ -#define __SLV2_MODEL_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \defgroup model Data model loading - * - * These functions deal with the data model which other SLV2 methods - * operate with. The data model is LV2 data loaded from bundles, from - * which you can query plugins, etc. - * - * Normal hosts which just want to easily load plugins by URI are strongly - * recommended to simply find all installed data in the recommended way with - * \ref slv2_model_load_all rather than find and load bundles manually. - * - * Functions are provided for hosts that wish to access bundles explicitly and - * individually for some reason, this is intended for hosts which are tied to - * a specific bundle (shipped with the application). - * - * @{ - */ - - -/** Create a new, empty model. - */ -SLV2Model -slv2_model_new(); - - -/** Destroy a model. - * - * NB: Destroying a model will leave dangling references in any plugin lists, - * plugins, etc. Do not destroy a model until you are finished with all - * objects that came from it. - */ -void -slv2_model_free(SLV2Model model); - - -/** Load all installed LV2 bundles on the system - * - * This is the recommended way for hosts to load LV2 data. It does the most - * reasonable thing to find all installed plugins, extensions, etc. on the - * system. The environment variable LV2_PATH may be used to set the - * directories inside which this function will look for bundles. Otherwise - * a sensible, standard default will be used. - * - * Use of other functions for loading bundles is \em highly discouraged - * without a special reason to do so - use this one. - */ -void -slv2_model_load_all(SLV2Model model); - - -/** Load all bundles found in \a search_path. - * - * \param search_path A colon-delimited list of directories. These directories - * should contain LV2 bundle directories (ie the search path is a list of - * parent directories of bundles, not a list of bundle directories). - * - * If \a search_path is NULL, \a model will be unmodified. - * Use of this function is \b not recommended. Use \ref slv2_model_load_all. - */ -void -slv2_model_load_path(SLV2Model model, - const char* search_path); - - -/** Load a specific bundle into \a model. - * - * \arg bundle_base_uri is a fully qualified URI to the bundle directory, - * with the trailing slash, eg. file:///usr/lib/lv2/someBundle/ - * - * Normal hosts should not use this function. - * - * Hosts should not attach \em any long-term significance to bundle paths - * as there are no guarantees they will remain consistent whatsoever. - * This function should only be used by apps which ship with a special - * bundle (which it knows exists at some path because they are part of - * the same package). - */ -void -slv2_model_load_bundle(SLV2Model model, - const char* bundle_base_uri); - - -/** Add all plugins present in \a model to \a list. - * - * Returned plugins contain a reference to this model, model must not be - * destroyed until plugins are finished with. - */ -SLV2Plugins -slv2_model_get_all_plugins(SLV2Model model); - - -/** Get plugins filtered by a user-defined filter function. - * - * All plugins in \a model that return true when passed to \a include - * (a pointer to a function that takes an SLV2Plugin and returns a bool) - * will be added to \a list. - * - * Returned plugins contain a reference to this model, model must not be - * destroyed until plugins are finished with. - */ -SLV2Plugins -slv2_model_get_plugins_by_filter(SLV2Model model, - bool (*include)(SLV2Plugin)); - - -#if 0 -/** Get plugins filtered by a user-defined SPARQL query. - * - * This is much faster than using slv2_model_get_plugins_by_filter with a - * filter function which calls the various slv2_plugin_* functions. - * - * \param query A valid SPARQL query which SELECTs a single variable, which - * should match the URI of plugins to be loaded. - * - * \b Example: Get all plugins with at least 1 audio input and output: - \verbatim -PREFIX : -SELECT DISTINCT ?plugin WHERE { - ?plugin :port [ a :AudioPort; a :InputPort ] ; - :port [ a :AudioPort; a :OutputPort ] . -} -\endverbatim - * - * Returned plugins contain a reference to this model, model must not be - * destroyed until plugins are finished with. - */ -SLV2Plugins -slv2_model_get_plugins_by_query(SLV2Model model, - const char* query); -#endif - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* __SLV2_MODEL_H__ */ - diff --git a/slv2/plugin.h b/slv2/plugin.h index 7b8d62b..47cb9ee 100644 --- a/slv2/plugin.h +++ b/slv2/plugin.h @@ -31,12 +31,12 @@ extern "C" { /** \defgroup data Plugin data access * - * These functions work exclusively with the plugin's RDF data file. + * These functions work exclusively with the plugin's RDF data. * They do not load or access the plugin dynamic library in any way. * - * An SLV2Plugin is a weak reference (ie URIs) to an LV2 plugin in the - * Model. Most functions which operate on an SLV2Plugin actually query - * the data in the model. + * An SLV2Plugin contains an in-memory cache of the plugin data, loaded + * on demand. Duplicating plugins should be avoided when possible for + * performance reasons. * * @{ */ diff --git a/slv2/pluginlist.h b/slv2/pluginlist.h index c0c1b4d..cd1bbf8 100644 --- a/slv2/pluginlist.h +++ b/slv2/pluginlist.h @@ -32,7 +32,7 @@ typedef void* SLV2Plugins; /** \defgroup plugins Plugin lists * * These functions work with lists of plugins which come from an - * SLV2Model. These lists contain only a weak reference to an LV2 plugin + * SLV2World. These lists contain only a weak reference to an LV2 plugin * in the Model. * * @{ diff --git a/slv2/slv2.h b/slv2/slv2.h index 8691e28..431bd17 100644 --- a/slv2/slv2.h +++ b/slv2/slv2.h @@ -24,7 +24,7 @@ extern "C" { #endif #include -#include +#include #include #include #include diff --git a/slv2/types.h b/slv2/types.h index da53069..f0f9b7f 100644 --- a/slv2/types.h +++ b/slv2/types.h @@ -47,7 +47,7 @@ typedef struct _Port* SLV2Port; typedef struct _Plugin* SLV2Plugin; -typedef struct _Model* SLV2Model; +typedef struct _World* SLV2World; #ifdef __cplusplus } diff --git a/slv2/world.h b/slv2/world.h new file mode 100644 index 0000000..4f5b252 --- /dev/null +++ b/slv2/world.h @@ -0,0 +1,166 @@ +/* SLV2 + * Copyright (C) 2007 Dave Robillard + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef __SLV2_WORLD_H__ +#define __SLV2_WORLD_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** \defgroup world Library context, data loading, etc. + * + * These functions deal with the data model which other SLV2 methods + * operate with. The world contains an in-memory cache of all bundles + * manifest.ttl files, from which you can quickly query plugins, etc. + * + * Normal hosts which just want to easily load plugins by URI are strongly + * recommended to simply find all installed data in the recommended way with + * \ref slv2_world_load_all rather than find and load bundles manually. + * + * Functions are provided for hosts that wish to access bundles explicitly and + * individually for some reason, this is intended for hosts which are tied to + * a specific bundle (shipped with the application). + * + * @{ + */ + + +/** Initialize a new, empty world. + */ +SLV2World +slv2_world_new(); + + +/** Destroy the world, mwahaha. + * + * NB: Destroying the world will leave dangling references in any plugin lists, + * plugins, etc. Do not destroy the world until you are finished with all + * objects that came from it. + */ +void +slv2_world_free(SLV2World world); + + +/** Load all installed LV2 bundles on the system + * + * This is the recommended way for hosts to load LV2 data. It does the most + * reasonable thing to find all installed plugins, extensions, etc. on the + * system. The environment variable LV2_PATH may be used to set the + * directories inside which this function will look for bundles. Otherwise + * a sensible, standard default will be used. + * + * Use of other functions for loading bundles is \em highly discouraged + * without a special reason to do so - use this one. + */ +void +slv2_world_load_all(SLV2World world); + + +/** Load all bundles found in \a search_path. + * + * \param search_path A colon-delimited list of directories. These directories + * should contain LV2 bundle directories (ie the search path is a list of + * parent directories of bundles, not a list of bundle directories). + * + * If \a search_path is NULL, \a world will be unmodified. + * Use of this function is \b not recommended. Use \ref slv2_world_load_all. + */ +void +slv2_world_load_path(SLV2World world, + const char* search_path); + + +/** Load a specific bundle into \a world. + * + * \arg bundle_base_uri is a fully qualified URI to the bundle directory, + * with the trailing slash, eg. file:///usr/lib/lv2/someBundle/ + * + * Normal hosts should not use this function. + * + * Hosts should not attach \em any long-term significance to bundle paths + * as there are no guarantees they will remain consistent whatsoever. + * This function should only be used by apps which ship with a special + * bundle (which it knows exists at some path because they are part of + * the same package). + */ +void +slv2_world_load_bundle(SLV2World world, + const char* bundle_base_uri); + + +/** Add all plugins present in \a world to \a list. + * + * Returned plugins contain a reference to this world, world must not be + * destroyed until plugins are finished with. + */ +SLV2Plugins +slv2_world_get_all_plugins(SLV2World world); + + +/** Get plugins filtered by a user-defined filter function. + * + * All plugins in \a world that return true when passed to \a include + * (a pointer to a function that takes an SLV2Plugin and returns a bool) + * will be added to \a list. + * + * Returned plugins contain a reference to this world, world must not be + * destroyed until plugins are finished with. + */ +SLV2Plugins +slv2_world_get_plugins_by_filter(SLV2World world, + bool (*include)(SLV2Plugin)); + + +#if 0 +/** Get plugins filtered by a user-defined SPARQL query. + * + * This is much faster than using slv2_world_get_plugins_by_filter with a + * filter function which calls the various slv2_plugin_* functions. + * + * \param query A valid SPARQL query which SELECTs a single variable, which + * should match the URI of plugins to be loaded. + * + * \b Example: Get all plugins with at least 1 audio input and output: + \verbatim +PREFIX : +SELECT DISTINCT ?plugin WHERE { + ?plugin :port [ a :AudioPort; a :InputPort ] ; + :port [ a :AudioPort; a :OutputPort ] . +} +\endverbatim + * + * Returned plugins contain a reference to this world, world must not be + * destroyed until plugins are finished with. + */ +SLV2Plugins +slv2_world_get_plugins_by_query(SLV2World world, + const char* query); +#endif + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* __SLV2_WORLD_H__ */ + -- cgit v1.2.1