diff --git a/source/backend/plugin/CarlaPluginLV2.cpp b/source/backend/plugin/CarlaPluginLV2.cpp index af01bdaea..ac8741654 100644 --- a/source/backend/plugin/CarlaPluginLV2.cpp +++ b/source/backend/plugin/CarlaPluginLV2.cpp @@ -39,6 +39,9 @@ extern "C" { #include "juce_core/juce_core.h" +#include +#include + using juce::File; #define URI_CARLA_ATOM_WORKER "http://kxstudio.sf.net/ns/carla/atomWorker" @@ -508,7 +511,7 @@ public: fEventsOut(), fLv2Options(), fPipeServer(engine, this), - fCustomURIDs(), + fCustomURIDs(CARLA_URI_MAP_ID_COUNT, std::string("urn:null")), fFirstActive(true), fLastStateChunk(nullptr), fLastTimeInfo(), @@ -516,12 +519,10 @@ public: fUI() { carla_debug("CarlaPluginLV2::CarlaPluginLV2(%p, %i)", engine, id); + CARLA_SAFE_ASSERT(fCustomURIDs.size() == CARLA_URI_MAP_ID_COUNT); carla_zeroPointers(fFeatures, kFeatureCountAll+1); - for (uint32_t i=0; i < CARLA_URI_MAP_ID_COUNT; ++i) - fCustomURIDs.append(nullptr); - #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" @@ -674,16 +675,6 @@ public: } } - for (LinkedList::Itenerator it = fCustomURIDs.begin2(); it.valid(); it.next()) - { - const char* const uri(it.getValue(nullptr)); - - if (uri != nullptr) - delete[] uri; - } - - fCustomURIDs.clear(); - if (fLastStateChunk != nullptr) { std::free(fLastStateChunk); @@ -1272,13 +1263,18 @@ public: const ScopedLocale csl; // write URI mappings - for (std::size_t i=CARLA_URI_MAP_ID_COUNT, count=fCustomURIDs.count(); i < count; ++i) + uint32_t i = 0; + for (auto it=fCustomURIDs.begin(), end=fCustomURIDs.end(); it != end; ++it, ++i) { - std::snprintf(tmpBuf, 0xff, P_SIZE "\n", i); + if (i < CARLA_URI_MAP_ID_COUNT) + continue; + const std::string& uri(*it); + + std::snprintf(tmpBuf, 0xff, "%u\n", i); fPipeServer.writeMessage("urid\n", 5); fPipeServer.writeMessage(tmpBuf); - fPipeServer.writeAndFixMessage(fCustomURIDs.getAt(i, nullptr)); + fPipeServer.writeAndFixMessage(uri.c_str()); } // write UI options @@ -4297,31 +4293,30 @@ public: CARLA_SAFE_ASSERT_RETURN(uri != nullptr && uri[0] != '\0', CARLA_URI_MAP_ID_NULL); carla_debug("CarlaPluginLV2::getCustomURID(\"%s\")", uri); - for (size_t i=0; i < fCustomURIDs.count(); ++i) - { - const char* const thisUri(fCustomURIDs.getAt(i, nullptr)); - if (thisUri != nullptr && std::strcmp(thisUri, uri) == 0) - return static_cast(i); - } + const std::size_t uriCount(fCustomURIDs.size()); + + const std::string s_uri(uri); + const std::size_t s_pos(std::find(fCustomURIDs.begin(), fCustomURIDs.end(), s_uri) - fCustomURIDs.begin()); - const LV2_URID urid(static_cast(fCustomURIDs.count())); + if (s_pos < uriCount) + return static_cast(s_pos); - fCustomURIDs.append(carla_strdup(uri)); + fCustomURIDs.push_back(uri); if (fUI.type == UI::TYPE_BRIDGE && fPipeServer.isPipeRunning()) - fPipeServer.writeLv2UridMessage(urid, uri); + fPipeServer.writeLv2UridMessage(uriCount, uri); - return urid; + return uriCount; } const char* getCustomURIDString(const LV2_URID urid) const noexcept { static const char* const sFallback = "urn:null"; CARLA_SAFE_ASSERT_RETURN(urid != CARLA_URI_MAP_ID_NULL, sFallback); - CARLA_SAFE_ASSERT_RETURN(urid < fCustomURIDs.count(), sFallback); + CARLA_SAFE_ASSERT_RETURN(urid < fCustomURIDs.size(), sFallback); carla_debug("CarlaPluginLV2::getCustomURIString(%i)", urid); - return fCustomURIDs.getAt(urid, sFallback); + return fCustomURIDs[urid].c_str(); } // ------------------------------------------------------------------- @@ -5529,9 +5524,11 @@ public: { CARLA_SAFE_ASSERT_RETURN(urid != CARLA_URI_MAP_ID_NULL,); CARLA_SAFE_ASSERT_RETURN(uri != nullptr && uri[0] != '\0',); - carla_debug("CarlaPluginLV2::handleUridMap(%i v " P_SIZE ", \"%s\")", urid, fCustomURIDs.count()-1, uri); + carla_debug("CarlaPluginLV2::handleUridMap(%i v " P_SIZE ", \"%s\")", urid, fCustomURIDs.size()-1, uri); + + const std::size_t uriCount(fCustomURIDs.size()); - if (urid < fCustomURIDs.count()) + if (urid < uriCount) { const char* const ourURI(carla_lv2_urid_unmap(this, urid)); CARLA_SAFE_ASSERT_RETURN(ourURI != nullptr,); @@ -5543,8 +5540,8 @@ public: } else { - CARLA_SAFE_ASSERT_RETURN(urid == fCustomURIDs.count(),); - fCustomURIDs.append(carla_strdup(uri)); + CARLA_SAFE_ASSERT_RETURN(urid == uriCount,); + fCustomURIDs.push_back(uri); } } @@ -5578,7 +5575,7 @@ private: CarlaPluginLV2Options fLv2Options; CarlaPipeServerLV2 fPipeServer; - LinkedList fCustomURIDs; + std::vector fCustomURIDs; bool fFirstActive; // first process() call after activate() void* fLastStateChunk; diff --git a/source/bridges-ui/CarlaBridgeUI-LV2.cpp b/source/bridges-ui/CarlaBridgeUI-LV2.cpp index 5524d507f..0dafe7e21 100644 --- a/source/bridges-ui/CarlaBridgeUI-LV2.cpp +++ b/source/bridges-ui/CarlaBridgeUI-LV2.cpp @@ -23,6 +23,9 @@ #include "juce_core/juce_core.h" +#include +#include + #define URI_CARLA_ATOM_WORKER "http://kxstudio.sf.net/ns/carla/atomWorker" using juce::File; @@ -224,13 +227,12 @@ public: fRdfUiDescriptor(nullptr), fLv2Options(), fUiOptions(), - fCustomURIDs(), + fCustomURIDs(CARLA_URI_MAP_ID_COUNT, std::string("urn:null")), fExt() { - carla_zeroPointers(fFeatures, kFeatureCount+1); + CARLA_SAFE_ASSERT(fCustomURIDs.size() == CARLA_URI_MAP_ID_COUNT); - for (uint32_t i=0; i < CARLA_URI_MAP_ID_COUNT; ++i) - fCustomURIDs.append(nullptr); + carla_zeroPointers(fFeatures, kFeatureCount+1); // --------------------------------------------------------------- // initialize options @@ -376,16 +378,6 @@ public: fFeatures[i] = nullptr; } } - - for (LinkedList::Itenerator it = fCustomURIDs.begin2(); it.valid(); it.next()) - { - const char* const uri(it.getValue(nullptr)); - - if (uri != nullptr) - delete[] uri; - } - - fCustomURIDs.clear(); } // --------------------------------------------------------------------- @@ -622,10 +614,10 @@ public: void dspURIDReceived(const LV2_URID urid, const char* const uri) { - CARLA_SAFE_ASSERT_RETURN(urid == fCustomURIDs.count(),); + CARLA_SAFE_ASSERT_RETURN(urid == fCustomURIDs.size(),); CARLA_SAFE_ASSERT_RETURN(uri != nullptr && uri[0] != '\0',); - fCustomURIDs.append(carla_strdup(uri)); + fCustomURIDs.push_back(uri); } void uiOptionsChanged(const double sampleRate, const bool useTheme, const bool useThemeColors, const char* const windowTitle, uintptr_t transientWindowId) override @@ -655,21 +647,19 @@ public: LV2_URID urid = CARLA_URI_MAP_ID_NULL; - for (uint32_t i=0, count=static_cast(fCustomURIDs.count()); i(s_pos); + } + else { - urid = static_cast(fCustomURIDs.count()); - fCustomURIDs.append(carla_strdup(uri)); + urid = static_cast(uriCount); + fCustomURIDs.push_back(uri); } if (isPipeRunning()) @@ -682,10 +672,10 @@ public: { static const char* const sFallback = "urn:null"; CARLA_SAFE_ASSERT_RETURN(urid != CARLA_URI_MAP_ID_NULL, sFallback); - CARLA_SAFE_ASSERT_RETURN(urid < fCustomURIDs.count(), sFallback); + CARLA_SAFE_ASSERT_RETURN(urid < fCustomURIDs.size(), sFallback); carla_debug("CarlaLv2Client::getCustomURIDString(%i)", urid); - return fCustomURIDs.getAt(urid, sFallback); + return fCustomURIDs[urid].c_str(); } // --------------------------------------------------------------------- @@ -765,7 +755,7 @@ private: Lv2PluginOptions fLv2Options; Options fUiOptions; - LinkedList fCustomURIDs; + std::vector fCustomURIDs; struct Extensions { const LV2_Options_Interface* options;