36 typedef LV2_Feature Feature;
39 typedef void(*FeatureHandler)(
void*,
void*);
42 typedef std::map<std::string, FeatureHandler> FeatureHandlerMap;
77 : E1::template I<A>, MixinTree<A, E2, E3, E4, E5, E6, E7, E8, E9> {
79 typedef MixinTree<A, E2, E3, E4, E5, E6, E7, E8, E9> Parent;
83 static void map_feature_handlers(FeatureHandlerMap& hmap) {
84 E1::template I<A>::map_feature_handlers(hmap);
85 Parent::map_feature_handlers(hmap);
90 return E1::template I<A>::check_ok() && Parent::check_ok();
94 static const void* extension_data(
const char* uri) {
95 const void* result = E1::template I<A>::extension_data(uri);
98 return Parent::extension_data(uri);
108 struct MixinTree<A, End, End, End, End, End, End, End, End, End> {
109 static void map_feature_handlers(FeatureHandlerMap& hmap) { }
110 bool check_ok()
const {
return true; }
111 static const void* extension_data(
const char* uri) {
return 0; }
119 template <
bool Required>
124 Extension() : m_ok(!Required) { }
129 static void map_feature_handlers(FeatureHandlerMap& hmap) { }
134 bool check_ok() {
return m_ok; }
140 static const void* extension_data(
const char* uri) {
return 0; }
156 template <
bool Required = true>
163 template <
class Derived>
struct I : Extension<Required> {
166 I() : m_callback_data(0), m_func(0) { }
169 static void map_feature_handlers(FeatureHandlerMap& hmap) {
174 static void handle_feature(
void* instance,
void* data) {
175 Derived* d =
reinterpret_cast<Derived*
>(instance);
177 LV2_URI_Map_Feature* umf =
reinterpret_cast<LV2_URI_Map_Feature*
>(data);
178 fe->m_callback_data = umf->callback_data;
180 fe->m_ok = (fe->m_func != 0);
192 uint32_t
uri_to_id(
const char* map,
const char* uri)
const {
193 return m_func(m_callback_data, map, uri);
196 LV2_URI_Map_Callback_Data m_callback_data;
197 uint32_t (*m_func)(LV2_URI_Map_Callback_Data,
const char*,
const char*);