|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- Copyright 2008-2012 David Robillard <http://drobilla.net>
- Copyright 2011 Gabriel M. Beddingfield <gabrbedd@gmail.com>
-
- 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.
- */
-
- /**
- @file urid.h
- C header for the LV2 URID extension <http://lv2plug.in/ns/ext/urid>
- */
-
- #ifndef LV2_URID_H
- #define LV2_URID_H
-
- #define LV2_URID_URI "http://lv2plug.in/ns/ext/urid"
- #define LV2_URID_PREFIX LV2_URID_URI "#"
-
- #define LV2_URID__map LV2_URID_PREFIX "map"
- #define LV2_URID__unmap LV2_URID_PREFIX "unmap"
-
- /* Legacy defines */
- #define LV2_URID_MAP_URI LV2_URID__map
- #define LV2_URID_UNMAP_URI LV2_URID__unmap
-
- #include <stdint.h>
-
- /**
- Opaque pointer to host data for LV2_URID_Map.
- */
- typedef void* LV2_URID_Map_Handle;
-
- /**
- Opaque pointer to host data for LV2_URID_Unmap.
- */
- typedef void* LV2_URID_Unmap_Handle;
-
- /**
- URI mapped to an integer.
- */
- typedef uint32_t LV2_URID;
-
- /**
- URID Map Feature (LV2_URID__map)
- */
- typedef struct _LV2_URID_Map {
- /**
- Opaque pointer to host data.
-
- This MUST be passed to map_uri() whenever it is called.
- Otherwise, it must not be interpreted in any way.
- */
- LV2_URID_Map_Handle handle;
-
- /**
- Get the numeric ID of a URI.
-
- If the ID does not already exist, it will be created.
-
- This function is referentially transparent; any number of calls with the
- same arguments is guaranteed to return the same value over the life of a
- plugin instance. Note, however, that several URIs MAY resolve to the
- same ID if the host considers those URIs equivalent.
-
- This function is not necessarily very fast or RT-safe: plugins SHOULD
- cache any IDs they might need in performance critical situations.
-
- The return value 0 is reserved and indicates that an ID for that URI
- could not be created for whatever reason. However, hosts SHOULD NOT
- return 0 from this function in non-exceptional circumstances (i.e. the
- URI map SHOULD be dynamic).
-
- @param handle Must be the callback_data member of this struct.
- @param uri The URI to be mapped to an integer ID.
- */
- LV2_URID (*map)(LV2_URID_Map_Handle handle,
- const char* uri);
- } LV2_URID_Map;
-
- /**
- URI Unmap Feature (LV2_URID__unmap)
- */
- typedef struct _LV2_URID_Unmap {
- /**
- Opaque pointer to host data.
-
- This MUST be passed to unmap() whenever it is called.
- Otherwise, it must not be interpreted in any way.
- */
- LV2_URID_Unmap_Handle handle;
-
- /**
- Get the URI for a previously mapped numeric ID.
-
- Returns NULL if @p urid is not yet mapped. Otherwise, the corresponding
- URI is returned in a canonical form. This MAY not be the exact same
- string that was originally passed to LV2_URID_Map::map(), but it MUST be
- an identical URI according to the URI syntax specification (RFC3986). A
- non-NULL return for a given @p urid will always be the same for the life
- of the plugin. Plugins that intend to perform string comparison on
- unmapped URIs SHOULD first canonicalise URI strings with a call to
- map_uri() followed by a call to unmap_uri().
-
- @param handle Must be the callback_data member of this struct.
- @param urid The ID to be mapped back to the URI string.
- */
- const char* (*unmap)(LV2_URID_Unmap_Handle handle,
- LV2_URID urid);
- } LV2_URID_Unmap;
-
- #endif /* LV2_URID_H */
|