diff options
author | David Robillard <d@drobilla.net> | 2016-12-17 22:32:34 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2017-02-26 14:59:00 +0100 |
commit | c8b942918517fdeefd9886bfbae1d00ec62d47b0 (patch) | |
tree | 613a0f78b1dc00c0f40ad03805c568cadf634077 /lv2/lv2plug.in/ns/ext | |
parent | 56f064dce822a53ad668c38d1bb7b2b3025fe270 (diff) | |
download | lv2-c8b942918517fdeefd9886bfbae1d00ec62d47b0.tar.xz |
Add C++ bindings
Diffstat (limited to 'lv2/lv2plug.in/ns/ext')
-rw-r--r-- | lv2/lv2plug.in/ns/ext/atom/atom.hpp | 81 | ||||
-rw-r--r-- | lv2/lv2plug.in/ns/ext/urid/urid.hpp | 114 |
2 files changed, 195 insertions, 0 deletions
diff --git a/lv2/lv2plug.in/ns/ext/atom/atom.hpp b/lv2/lv2plug.in/ns/ext/atom/atom.hpp new file mode 100644 index 0000000..87871c0 --- /dev/null +++ b/lv2/lv2plug.in/ns/ext/atom/atom.hpp @@ -0,0 +1,81 @@ +/* + Copyright 2008-2014 David Robillard <http://drobilla.net> + + 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. +*/ + +#ifndef LV2_ATOM_ATOM_HPP +#define LV2_ATOM_ATOM_HPP + +#include "lv2/lv2plug.in/ns/ext/atom/atom.h" +#include "lv2/lv2plug.in/ns/ext/atom/util.h" + +namespace lv2 { +namespace atom { + +typedef LV2_Atom Atom; + +struct Event : public LV2_Atom_Event +{ + inline uint32_t type() const { return body.type; } + inline uint32_t size() const { return body.size; } + + /** Convenience accessor for byte-oriented payloads. */ + inline uint8_t operator[](size_t i) const { + return *((const uint8_t*)(&body + 1) + i); + } +}; + +class Sequence : public LV2_Atom_Sequence +{ +public: + class const_iterator { + public: + inline const_iterator(const Event* ev) : m_ev(ev) {} + + inline const_iterator operator++() { + m_ev = (const Event*)( + (const uint8_t*)m_ev + + sizeof(LV2_Atom_Event) + + lv2_atom_pad_size(m_ev->body.size)); + return *this; + } + + inline bool operator==(const const_iterator& i) const { + return m_ev == i.m_ev; + } + + inline bool operator!=(const const_iterator& i) const { + return m_ev != i.m_ev; + } + + inline const Event& operator*() const { return *m_ev; } + inline const Event* operator->() const { return m_ev; } + + private: + const Event* m_ev; + }; + + inline const_iterator begin() const { + return const_iterator((const Event*)(&body + 1)); + } + + inline const_iterator end() const { + return const_iterator((const Event*)((const char*)&body + atom.size)); + } +}; + +} // namespace atom +} // namespace lv2 + +#endif // LV2_ATOM_ATOM_HPP diff --git a/lv2/lv2plug.in/ns/ext/urid/urid.hpp b/lv2/lv2plug.in/ns/ext/urid/urid.hpp new file mode 100644 index 0000000..38fa8be --- /dev/null +++ b/lv2/lv2plug.in/ns/ext/urid/urid.hpp @@ -0,0 +1,114 @@ +/* + Copyright 2015 David Robillard <http://drobilla.net> + + 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. +*/ + +#ifndef LV2_URID_HPP +#define LV2_URID_HPP + +#include "lv2/lv2plug.in/ns/lv2core/Feature.hpp" +#include "lv2/lv2plug.in/ns/ext/urid/urid.h" + +namespace lv2 { +namespace urid { + +/** + URI mapped to an integer. +*/ +typedef LV2_URID URID; + +/** + URID Map Feature (LV2_URID__map) +*/ +template<bool Required> +class Map : public Feature<LV2_URID_Map, Required> +{ +public: + Map(const LV2_Feature*const* features, + bool* valid) + : Feature<LV2_URID_Map, true>(features, LV2_URID__map, valid) + {} + + /** + 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(const char* uri) { + return this->m_data->map(this->m_data->handle, uri); + } + + /** + Convenience wrapper for calling map(). + */ + LV2_URID operator()(const char* uri) { return map(uri); } +}; + +/** + URI Unmap Feature (LV2_URID__unmap) +*/ +template<bool Required> +class Unmap : public Feature<LV2_URID_Unmap, Required> +{ +public: + Unmap(const LV2_Feature*const* features, + bool* valid) + : Feature<LV2_URID_Map, true>(features, LV2_URID__unmap, valid) + {} + + /** + Get the URI for a previously mapped numeric ID. + + Returns NULL if `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 `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 urid) { + return this->m_data->unmap(this->m_data->handle, urid); + } + + /** + Convenience wrapper for calling unmap(). + */ + const char* operator()(LV2_URID urid) { return unmap(urid); } +}; + +} // namespace urid +} // namespace lv2 + +#endif // LV2_URID_HPP |