Add virtual destructor.
[ardour.git] / libs / ardour / lv2ext / lv2_uri_map.h
1 /* lv2_uri_map.h - C header file for the LV2 URI Map extension.
2  * 
3  * Copyright (C) 2008 Dave Robillard <dave@drobilla.net>
4  * 
5  * This header is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU Lesser General Public License as published
7  * by the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This header is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
13  * License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this header; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place, Suite 330, Boston, MA 01222-1307 USA
18  */
19
20 #ifndef LV2_URI_MAP_H
21 #define LV2_URI_MAP_H
22
23 #define LV2_URI_MAP_URI "http://lv2plug.in/ns/ext/uri-map"
24
25 #include <stdint.h>
26
27 /** @file
28  * This header defines the LV2 URI Map extension with the URI
29  * <http://lv2plug.in/ns/ext/uri-map> (preferred prefix 'lv2urimap').
30  *
31  * This extension defines a simple mechanism for plugins to map URIs to
32  * integers, usually for performance reasons (e.g. processing events
33  * typed by URIs in real time).  The expected use case is for plugins to
34  * map URIs to integers for things they 'understand' at instantiation time,
35  * and store those values for use in the audio thread without doing any string
36  * comparison.  This allows the extensibility of RDF with the performance of
37  * integers (or centrally defined enumerations).
38  */
39         
40
41 /** Opaque pointer to host data. */
42 typedef void* LV2_URI_Map_Callback_Data;
43
44
45 /** The data field of the LV2_Feature for this extension.
46  *
47  * To support this feature the host must pass an LV2_Feature struct to the
48  * plugin's instantiate method with URI "http://lv2plug.in/ns/ext/uri-map"
49  * and data pointed to an instance of this struct.
50  */
51 typedef struct {
52         
53         /** Opaque pointer to host data.
54          *
55          * The plugin MUST pass this to any call to functions in this struct.
56          * Otherwise, it must not be interpreted in any way.
57          */
58         LV2_URI_Map_Callback_Data callback_data;
59         
60         /** Get the numeric ID of a URI from the host.
61          *
62          * @param callback_data Must be the callback_data member of this struct.
63          * @param map The 'context' of this URI.  Certain extensions may define a
64          *        URI that must be passed here with certain restrictions on the
65          *        return value (e.g. limited range).  This value may be NULL if
66          *        the plugin needs an ID for a URI in general.
67          * @param uri The URI to be mapped to an integer ID.
68          *
69          * This function is referentially transparent - any number of calls with
70          * the same arguments is guaranteed to return the same value over the life
71          * of a plugin instance (though the same URI may return different values
72          * with a different map parameter).  However, this function is not
73          * necessarily very fast: plugins should cache any IDs they might need in
74          * performance critical situations.
75          * The return value 0 is reserved and means an ID for that URI could not
76          * be created for whatever reason.  Extensions may define more precisely
77          * what this means, but in general plugins should gracefully handle 0
78          * and consider whatever they wanted the URI for "unsupported".
79          */
80         uint32_t (*uri_to_id)(LV2_URI_Map_Callback_Data callback_data,
81                               const char*               map,
82                               const char*               uri);
83
84 } LV2_URI_Map_Feature;
85
86
87 #endif // LV2_URI_MAP_H
88