Collections

Lilv has several collection types for holding various types of value.

Each collection type supports a similar basic API, except LilvPlugins which is internal and thus lacks a free function:

  • void PREFIX_free (coll)

  • unsigned PREFIX_size (coll)

  • LilvIter* PREFIX_begin (coll)

The types of collection are:

  • LilvPlugins, with function prefix lilv_plugins_.

  • LilvPluginClasses, with function prefix lilv_plugin_classes_.

  • LilvScalePoints, with function prefix lilv_scale_points_.

  • LilvNodes, with function prefix lilv_nodes_.

  • LilvUIs, with function prefix lilv_uis_.

void lilv_plugin_classes_free(LilvPluginClasses *collection)
unsigned lilv_plugin_classes_size(const LilvPluginClasses *collection)
LilvIter *lilv_plugin_classes_begin(const LilvPluginClasses *collection)
const LilvPluginClass *lilv_plugin_classes_get(const LilvPluginClasses *collection, LilvIter *i)
LilvIter *lilv_plugin_classes_next(const LilvPluginClasses *collection, LilvIter *i)
bool lilv_plugin_classes_is_end(const LilvPluginClasses *collection, LilvIter *i)
const LilvPluginClass *lilv_plugin_classes_get_by_uri(const LilvPluginClasses *classes, const LilvNode *uri)

Get a plugin class from classes by URI.

Return value is shared (stored in classes) and must not be freed or modified by the caller in any way.

Returns:

NULL if no plugin class with uri is found in classes.

void lilv_scale_points_free(LilvScalePoints *collection)
unsigned lilv_scale_points_size(const LilvScalePoints *collection)
LilvIter *lilv_scale_points_begin(const LilvScalePoints *collection)
const LilvScalePoint *lilv_scale_points_get(const LilvScalePoints *collection, LilvIter *i)
LilvIter *lilv_scale_points_next(const LilvScalePoints *collection, LilvIter *i)
bool lilv_scale_points_is_end(const LilvScalePoints *collection, LilvIter *i)
void lilv_uis_free(LilvUIs *collection)
unsigned lilv_uis_size(const LilvUIs *collection)
LilvIter *lilv_uis_begin(const LilvUIs *collection)
const LilvUI *lilv_uis_get(const LilvUIs *collection, LilvIter *i)
LilvIter *lilv_uis_next(const LilvUIs *collection, LilvIter *i)
bool lilv_uis_is_end(const LilvUIs *collection, LilvIter *i)
const LilvUI *lilv_uis_get_by_uri(const LilvUIs *uis, const LilvNode *uri)

Get a UI from uis by URI.

Return value is shared (stored in uis) and must not be freed or modified by the caller in any way.

Returns:

NULL if no UI with uri is found in list.

void lilv_nodes_free(LilvNodes *collection)
unsigned lilv_nodes_size(const LilvNodes *collection)
LilvIter *lilv_nodes_begin(const LilvNodes *collection)
const LilvNode *lilv_nodes_get(const LilvNodes *collection, LilvIter *i)
LilvIter *lilv_nodes_next(const LilvNodes *collection, LilvIter *i)
bool lilv_nodes_is_end(const LilvNodes *collection, LilvIter *i)
LilvNode *lilv_nodes_get_first(const LilvNodes *collection)
bool lilv_nodes_contains(const LilvNodes *nodes, const LilvNode *value)

Return whether values contains value.

LilvNodes *lilv_nodes_merge(const LilvNodes *a, const LilvNodes *b)

Return a new LilvNodes that contains all nodes from both a and b.

unsigned lilv_plugins_size(const LilvPlugins *collection)
LilvIter *lilv_plugins_begin(const LilvPlugins *collection)
const LilvPlugin *lilv_plugins_get(const LilvPlugins *collection, LilvIter *i)
LilvIter *lilv_plugins_next(const LilvPlugins *collection, LilvIter *i)
bool lilv_plugins_is_end(const LilvPlugins *collection, LilvIter *i)
const LilvPlugin *lilv_plugins_get_by_uri(const LilvPlugins *plugins, const LilvNode *uri)

Get a plugin from plugins by URI.

Return value is shared (stored in plugins) and must not be freed or modified by the caller in any way.

Returns:

NULL if no plugin with uri is found in plugins.

LILV_FOREACH

Iterate over each element of a collection.

LILV_FOREACH(plugin_classes, i, classes) {
   LilvPluginClass c = lilv_plugin_classes_get(classes, i);
   // ...
}