From e75e4c88f91c6ca5320d61580404e48931b30345 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 15 Mar 2012 00:39:10 +0000 Subject: Use host-provided URI-map for internally mapped URIs. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4061 a436a847-0d15-0410-975c-d299462d15a1 --- include/ingen/shared/LV2URIMap.hpp | 6 +++- src/shared/LV2URIMap.cpp | 58 +++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/include/ingen/shared/LV2URIMap.hpp b/include/ingen/shared/LV2URIMap.hpp index fc41f3bf..70c47a12 100644 --- a/include/ingen/shared/LV2URIMap.hpp +++ b/include/ingen/shared/LV2URIMap.hpp @@ -66,14 +66,18 @@ public: class URIDMapFeature : public Feature { public: URIDMapFeature(LV2URIMap* map, LV2_URID_Map* urid_map); + LV2_URID map(const char* uri); private: + static LV2_URID default_map(LV2_URID_Map_Handle h, const char* uri); LV2_URID_Map _feature_data; }; class URIDUnmapFeature : public Feature { public: URIDUnmapFeature(LV2URIMap* map, LV2_URID_Unmap* urid_unmap); + const char* unmap(const LV2_URID urid); private: + static const char* default_unmap(LV2_URID_Map_Handle h, LV2_URID uri); LV2_URID_Unmap _feature_data; }; @@ -93,7 +97,7 @@ private: const char* uri); static LV2_URID urid_map(LV2_URID_Map_Handle handle, const char* uri); - static const char* urid_unmap(LV2_URID_Map_Handle handle, LV2_URID urid); + static const char* urid_unmap(LV2_URID_Unmap_Handle handle, LV2_URID urid); typedef std::map EventToGlobal; typedef std::map GlobalToEvent; diff --git a/src/shared/LV2URIMap.cpp b/src/shared/LV2URIMap.cpp index 43a949a8..c66a8984 100644 --- a/src/shared/LV2URIMap.cpp +++ b/src/shared/LV2URIMap.cpp @@ -51,24 +51,55 @@ LV2URIMap::URIMapFeature::URIMapFeature(LV2URIMap* map) LV2URIMap::URIDMapFeature::URIDMapFeature(LV2URIMap* map, LV2_URID_Map* urid_map) - : Feature(LV2_URID__map, urid_map ? urid_map : &_feature_data) + : Feature(LV2_URID__map, &_feature_data) { - if (!urid_map) { - _feature_data.map = &LV2URIMap::urid_map; - _feature_data.handle = map; + if (urid_map) { + _feature_data = *urid_map; + } else { + _feature_data.map = default_map; + _feature_data.handle = NULL; } } +LV2_URID +LV2URIMap::URIDMapFeature::default_map(LV2_URID_Map_Handle handle, + const char* uri) +{ + return static_cast(g_quark_from_string(uri)); +} + +LV2_URID +LV2URIMap::URIDMapFeature::map(const char* uri) +{ + return _feature_data.map(_feature_data.handle, uri); +} + + LV2URIMap::URIDUnmapFeature::URIDUnmapFeature(LV2URIMap* map, LV2_URID_Unmap* urid_unmap) - : Feature(LV2_URID__unmap, urid_unmap ? urid_unmap : &_feature_data) + : Feature(LV2_URID__unmap, &_feature_data) { - if (!urid_unmap) { - _feature_data.unmap = &LV2URIMap::urid_unmap; - _feature_data.handle = map; + if (urid_unmap) { + _feature_data = *urid_unmap; + } else { + _feature_data.unmap = default_unmap; + _feature_data.handle = NULL; } } +const char* +LV2URIMap::URIDUnmapFeature::default_unmap(LV2_URID_Unmap_Handle handle, + LV2_URID urid) +{ + return g_quark_to_string(urid); +} + +const char* +LV2URIMap::URIDUnmapFeature::unmap(LV2_URID urid) +{ + return _feature_data.unmap(_feature_data.handle, urid); +} + uint32_t LV2URIMap::uri_to_id(const char* map, const char* uri) @@ -146,23 +177,16 @@ LV2URIMap::urid_map(LV2_URID_Map_Handle handle, const char* uri) return me->uri_to_id(NULL, uri); } -const char* -LV2URIMap::urid_unmap(LV2_URID_Map_Handle handle, LV2_URID urid) -{ - LV2URIMap* me = (LV2URIMap*)handle; - return me->id_to_uri(NULL, urid); -} - uint32_t LV2URIMap::map_uri(const char* uri) { - return static_cast(g_quark_from_string(uri)); + return _urid_map_feature->map(uri); } const char* LV2URIMap::unmap_uri(uint32_t urid) { - return g_quark_to_string(urid); + return _urid_unmap_feature->unmap(urid); } } // namespace Shared -- cgit v1.2.1