| @@ -1,4 +1,4 @@ | |||||
| // SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | // SPDX-License-Identifier: GPL-2.0-or-later | ||||
| /* TODO: | /* TODO: | ||||
| @@ -46,7 +46,6 @@ using water::Array; | |||||
| using water::CharPointer_UTF8; | using water::CharPointer_UTF8; | ||||
| using water::File; | using water::File; | ||||
| using water::MemoryOutputStream; | using water::MemoryOutputStream; | ||||
| using water::String; | |||||
| using water::StringArray; | using water::StringArray; | ||||
| using water::XmlDocument; | using water::XmlDocument; | ||||
| using water::XmlElement; | using water::XmlElement; | ||||
| @@ -2367,8 +2366,8 @@ void CarlaEngine::saveProjectInternal(water::MemoryOutputStream& outStream) cons | |||||
| outSettings << " <PreferUiBridges>" << bool2str(options.preferUiBridges) << "</PreferUiBridges>\n"; | outSettings << " <PreferUiBridges>" << bool2str(options.preferUiBridges) << "</PreferUiBridges>\n"; | ||||
| outSettings << " <UIsAlwaysOnTop>" << bool2str(options.uisAlwaysOnTop) << "</UIsAlwaysOnTop>\n"; | outSettings << " <UIsAlwaysOnTop>" << bool2str(options.uisAlwaysOnTop) << "</UIsAlwaysOnTop>\n"; | ||||
| outSettings << " <MaxParameters>" << String(options.maxParameters) << "</MaxParameters>\n"; | |||||
| outSettings << " <UIBridgesTimeout>" << String(options.uiBridgesTimeout) << "</UIBridgesTimeout>\n"; | |||||
| outSettings << " <MaxParameters>" << water::String(options.maxParameters) << "</MaxParameters>\n"; | |||||
| outSettings << " <UIBridgesTimeout>" << water::String(options.uiBridgesTimeout) << "</UIBridgesTimeout>\n"; | |||||
| if (isPlugin) | if (isPlugin) | ||||
| { | { | ||||
| @@ -2585,12 +2584,12 @@ void CarlaEngine::saveProjectInternal(water::MemoryOutputStream& outStream) cons | |||||
| outStream << "</CARLA-PROJECT>\n"; | outStream << "</CARLA-PROJECT>\n"; | ||||
| } | } | ||||
| static String findBinaryInCustomPath(const char* const searchPath, const char* const binary) | |||||
| static water::String findBinaryInCustomPath(const char* const searchPath, const char* const binary) | |||||
| { | { | ||||
| const StringArray searchPaths(StringArray::fromTokens(searchPath, CARLA_OS_SPLIT_STR, "")); | const StringArray searchPaths(StringArray::fromTokens(searchPath, CARLA_OS_SPLIT_STR, "")); | ||||
| // try direct filename first | // try direct filename first | ||||
| String jbinary(binary); | |||||
| water::String jbinary(binary); | |||||
| // adjust for current platform | // adjust for current platform | ||||
| #ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
| @@ -2601,7 +2600,7 @@ static String findBinaryInCustomPath(const char* const searchPath, const char* c | |||||
| jbinary = jbinary.substring(2).replaceCharacter('\\', '/'); | jbinary = jbinary.substring(2).replaceCharacter('\\', '/'); | ||||
| #endif | #endif | ||||
| String filename = File(jbinary.toRawUTF8()).getFileName(); | |||||
| water::String filename = File(jbinary.toRawUTF8()).getFileName(); | |||||
| int searchFlags = File::findFiles|File::ignoreHiddenFiles; | int searchFlags = File::findFiles|File::ignoreHiddenFiles; | ||||
| @@ -2613,7 +2612,7 @@ static String findBinaryInCustomPath(const char* const searchPath, const char* c | |||||
| #endif | #endif | ||||
| std::vector<File> results; | std::vector<File> results; | ||||
| for (const String *it=searchPaths.begin(), *end=searchPaths.end(); it != end; ++it) | |||||
| for (const water::String *it=searchPaths.begin(), *end=searchPaths.end(); it != end; ++it) | |||||
| { | { | ||||
| const File path(it->toRawUTF8()); | const File path(it->toRawUTF8()); | ||||
| @@ -2636,9 +2635,9 @@ static String findBinaryInCustomPath(const char* const searchPath, const char* c | |||||
| filename = File(jbinary.toRawUTF8()).getFileNameWithoutExtension() + ".so"; | filename = File(jbinary.toRawUTF8()).getFileNameWithoutExtension() + ".so"; | ||||
| #endif | #endif | ||||
| else | else | ||||
| return String(); | |||||
| return {}; | |||||
| for (const String *it=searchPaths.begin(), *end=searchPaths.end(); it != end; ++it) | |||||
| for (const water::String *it=searchPaths.begin(), *end=searchPaths.end(); it != end; ++it) | |||||
| { | { | ||||
| const File path(it->toRawUTF8()); | const File path(it->toRawUTF8()); | ||||
| @@ -2649,7 +2648,7 @@ static String findBinaryInCustomPath(const char* const searchPath, const char* c | |||||
| return results.front().getFullPathName(); | return results.front().getFullPathName(); | ||||
| } | } | ||||
| return String(); | |||||
| return {}; | |||||
| } | } | ||||
| bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alwaysLoadConnections) | bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alwaysLoadConnections) | ||||
| @@ -2659,7 +2658,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| CarlaScopedPointer<XmlElement> xmlElement(xmlDoc.getDocumentElement(true)); | CarlaScopedPointer<XmlElement> xmlElement(xmlDoc.getDocumentElement(true)); | ||||
| CARLA_SAFE_ASSERT_RETURN_ERR(xmlElement != nullptr, "Failed to parse project file"); | CARLA_SAFE_ASSERT_RETURN_ERR(xmlElement != nullptr, "Failed to parse project file"); | ||||
| const String& xmlType(xmlElement->getTagName()); | |||||
| const water::String& xmlType(xmlElement->getTagName()); | |||||
| const bool isPreset(xmlType.equalsIgnoreCase("carla-preset")); | const bool isPreset(xmlType.equalsIgnoreCase("carla-preset")); | ||||
| if (! (xmlType.equalsIgnoreCase("carla-project") || isPreset)) | if (! (xmlType.equalsIgnoreCase("carla-project") || isPreset)) | ||||
| @@ -2713,8 +2712,8 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| { | { | ||||
| for (XmlElement* settElem = elem->getFirstChildElement(); settElem != nullptr; settElem = settElem->getNextElement()) | for (XmlElement* settElem = elem->getFirstChildElement(); settElem != nullptr; settElem = settElem->getNextElement()) | ||||
| { | { | ||||
| const String& tag(settElem->getTagName()); | |||||
| const String text(settElem->getAllSubText().trim()); | |||||
| const water::String& tag(settElem->getTagName()); | |||||
| const water::String text(settElem->getAllSubText().trim()); | |||||
| /** some settings might be incorrect or require extra work, | /** some settings might be incorrect or require extra work, | ||||
| so we call setOption rather than modifying them direly */ | so we call setOption rather than modifying them direly */ | ||||
| @@ -2847,7 +2846,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| { | { | ||||
| if (XmlElement* const bpmElem = elem->getChildByName("BeatsPerMinute")) | if (XmlElement* const bpmElem = elem->getChildByName("BeatsPerMinute")) | ||||
| { | { | ||||
| const String bpmText(bpmElem->getAllSubText().trim()); | |||||
| const water::String bpmText(bpmElem->getAllSubText().trim()); | |||||
| const double bpm = bpmText.getDoubleValue(); | const double bpm = bpmText.getDoubleValue(); | ||||
| // some sane limits | // some sane limits | ||||
| @@ -2868,7 +2867,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| // and we handle plugins | // and we handle plugins | ||||
| for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) | for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) | ||||
| { | { | ||||
| const String& tagName(elem->getTagName()); | |||||
| const water::String& tagName(elem->getTagName()); | |||||
| if (isPreset || tagName == "Plugin") | if (isPreset || tagName == "Plugin") | ||||
| { | { | ||||
| @@ -2906,7 +2905,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| return false; | return false; | ||||
| } | } | ||||
| String lsState; | |||||
| water::String lsState; | |||||
| lsState << "0.35\n"; | lsState << "0.35\n"; | ||||
| lsState << "18 0 Chromatic\n"; | lsState << "18 0 Chromatic\n"; | ||||
| lsState << "18 1 Drum Kits\n"; | lsState << "18 1 Drum Kits\n"; | ||||
| @@ -3046,7 +3045,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| carla_stderr("Plugin binary '%s' doesn't exist on this filesystem, let's look for it...", | carla_stderr("Plugin binary '%s' doesn't exist on this filesystem, let's look for it...", | ||||
| stateSave.binary); | stateSave.binary); | ||||
| String result = findBinaryInCustomPath(searchPath, stateSave.binary); | |||||
| water::String result = findBinaryInCustomPath(searchPath, stateSave.binary); | |||||
| if (result.isEmpty()) | if (result.isEmpty()) | ||||
| { | { | ||||
| @@ -3198,12 +3197,12 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| if (XmlElement* const elemPositions = elemPatchbay->getChildByName("Positions")) | if (XmlElement* const elemPositions = elemPatchbay->getChildByName("Positions")) | ||||
| { | { | ||||
| String name; | |||||
| water::String name; | |||||
| PatchbayPosition ppos = { nullptr, -1, 0, 0, 0, 0, false }; | PatchbayPosition ppos = { nullptr, -1, 0, 0, 0, 0, false }; | ||||
| for (XmlElement* patchElem = elemPositions->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | for (XmlElement* patchElem = elemPositions->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | ||||
| { | { | ||||
| const String& patchTag(patchElem->getTagName()); | |||||
| const water::String& patchTag(patchElem->getTagName()); | |||||
| if (patchTag != "Position") | if (patchTag != "Position") | ||||
| continue; | continue; | ||||
| @@ -3211,7 +3210,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| XmlElement* const patchName = patchElem->getChildByName("Name"); | XmlElement* const patchName = patchElem->getChildByName("Name"); | ||||
| CARLA_SAFE_ASSERT_CONTINUE(patchName != nullptr); | CARLA_SAFE_ASSERT_CONTINUE(patchName != nullptr); | ||||
| const String nameText(patchName->getAllSubText().trim()); | |||||
| const water::String nameText(patchName->getAllSubText().trim()); | |||||
| name = xmlSafeString(nameText, false); | name = xmlSafeString(nameText, false); | ||||
| ppos.name = name.toRawUTF8(); | ppos.name = name.toRawUTF8(); | ||||
| @@ -3256,12 +3255,12 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| { | { | ||||
| if (XmlElement* const elemPositions = elemPatchbay->getChildByName("Positions")) | if (XmlElement* const elemPositions = elemPatchbay->getChildByName("Positions")) | ||||
| { | { | ||||
| String name; | |||||
| water::String name; | |||||
| PatchbayPosition ppos = { nullptr, -1, 0, 0, 0, 0, false }; | PatchbayPosition ppos = { nullptr, -1, 0, 0, 0, 0, false }; | ||||
| for (XmlElement* patchElem = elemPositions->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | for (XmlElement* patchElem = elemPositions->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | ||||
| { | { | ||||
| const String& patchTag(patchElem->getTagName()); | |||||
| const water::String& patchTag(patchElem->getTagName()); | |||||
| if (patchTag != "Position") | if (patchTag != "Position") | ||||
| continue; | continue; | ||||
| @@ -3269,7 +3268,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| XmlElement* const patchName = patchElem->getChildByName("Name"); | XmlElement* const patchName = patchElem->getChildByName("Name"); | ||||
| CARLA_SAFE_ASSERT_CONTINUE(patchName != nullptr); | CARLA_SAFE_ASSERT_CONTINUE(patchName != nullptr); | ||||
| const String nameText(patchName->getAllSubText().trim()); | |||||
| const water::String nameText(patchName->getAllSubText().trim()); | |||||
| name = xmlSafeString(nameText, false); | name = xmlSafeString(nameText, false); | ||||
| ppos.name = name.toRawUTF8(); | ppos.name = name.toRawUTF8(); | ||||
| @@ -3327,7 +3326,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| for (XmlElement* patchElem = elem->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | for (XmlElement* patchElem = elem->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | ||||
| { | { | ||||
| const String& patchTag(patchElem->getTagName()); | |||||
| const water::String& patchTag(patchElem->getTagName()); | |||||
| if (patchTag != "Connection") | if (patchTag != "Connection") | ||||
| continue; | continue; | ||||
| @@ -3337,8 +3336,8 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| for (XmlElement* connElem = patchElem->getFirstChildElement(); connElem != nullptr; connElem = connElem->getNextElement()) | for (XmlElement* connElem = patchElem->getFirstChildElement(); connElem != nullptr; connElem = connElem->getNextElement()) | ||||
| { | { | ||||
| const String& tag(connElem->getTagName()); | |||||
| const String text(connElem->getAllSubText().trim()); | |||||
| const water::String& tag(connElem->getTagName()); | |||||
| const water::String text(connElem->getAllSubText().trim()); | |||||
| /**/ if (tag == "Source") | /**/ if (tag == "Source") | ||||
| sourcePort = xmlSafeString(text, false); | sourcePort = xmlSafeString(text, false); | ||||
| @@ -3401,7 +3400,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) | for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) | ||||
| { | { | ||||
| const String& tagName(elem->getTagName()); | |||||
| const water::String& tagName(elem->getTagName()); | |||||
| // check if we want to load patchbay-mode connections into an external (multi-client) graph | // check if we want to load patchbay-mode connections into an external (multi-client) graph | ||||
| if (tagName == "Patchbay") | if (tagName == "Patchbay") | ||||
| @@ -3427,7 +3426,7 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| for (XmlElement* patchElem = elem->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | for (XmlElement* patchElem = elem->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) | ||||
| { | { | ||||
| const String& patchTag(patchElem->getTagName()); | |||||
| const water::String& patchTag(patchElem->getTagName()); | |||||
| if (patchTag != "Connection") | if (patchTag != "Connection") | ||||
| continue; | continue; | ||||
| @@ -3437,8 +3436,8 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alw | |||||
| for (XmlElement* connElem = patchElem->getFirstChildElement(); connElem != nullptr; connElem = connElem->getNextElement()) | for (XmlElement* connElem = patchElem->getFirstChildElement(); connElem != nullptr; connElem = connElem->getNextElement()) | ||||
| { | { | ||||
| const String& tag(connElem->getTagName()); | |||||
| const String text(connElem->getAllSubText().trim()); | |||||
| const water::String& tag(connElem->getTagName()); | |||||
| const water::String text(connElem->getAllSubText().trim()); | |||||
| /**/ if (tag == "Source") | /**/ if (tag == "Source") | ||||
| sourcePort = xmlSafeString(text, false); | sourcePort = xmlSafeString(text, false); | ||||
| @@ -34,7 +34,6 @@ | |||||
| using water::File; | using water::File; | ||||
| using water::MemoryBlock; | using water::MemoryBlock; | ||||
| using water::String; | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -926,7 +925,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_BREAK(bigValueFilePathTry.text[0] != '\0'); | CARLA_SAFE_ASSERT_BREAK(bigValueFilePathTry.text[0] != '\0'); | ||||
| if (! plugin->isEnabled()) break; | if (! plugin->isEnabled()) break; | ||||
| String bigValueFilePath(bigValueFilePathTry.text); | |||||
| water::String bigValueFilePath(bigValueFilePathTry.text); | |||||
| #ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
| // check if running under Wine | // check if running under Wine | ||||
| @@ -967,7 +966,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_BREAK(chunkFilePathTry.text[0] != '\0'); | CARLA_SAFE_ASSERT_BREAK(chunkFilePathTry.text[0] != '\0'); | ||||
| if (! plugin->isEnabled()) break; | if (! plugin->isEnabled()) break; | ||||
| String chunkFilePath(chunkFilePathTry.text); | |||||
| water::String chunkFilePath(chunkFilePathTry.text); | |||||
| #ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
| // check if running under Wine | // check if running under Wine | ||||
| @@ -978,7 +977,7 @@ public: | |||||
| File chunkFile(chunkFilePath.toRawUTF8()); | File chunkFile(chunkFilePath.toRawUTF8()); | ||||
| CARLA_SAFE_ASSERT_BREAK(chunkFile.existsAsFile()); | CARLA_SAFE_ASSERT_BREAK(chunkFile.existsAsFile()); | ||||
| String chunkDataBase64(chunkFile.loadFileAsString()); | |||||
| water::String chunkDataBase64(chunkFile.loadFileAsString()); | |||||
| chunkFile.deleteFile(); | chunkFile.deleteFile(); | ||||
| CARLA_SAFE_ASSERT_BREAK(chunkDataBase64.isNotEmpty()); | CARLA_SAFE_ASSERT_BREAK(chunkDataBase64.isNotEmpty()); | ||||
| @@ -1105,7 +1104,7 @@ public: | |||||
| { | { | ||||
| if (valueLen > maxLocalValueLen) | if (valueLen > maxLocalValueLen) | ||||
| { | { | ||||
| String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| water::String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| filePath += CARLA_OS_SEP_STR ".CarlaCustomData_"; | filePath += CARLA_OS_SEP_STR ".CarlaCustomData_"; | ||||
| filePath += fShmAudioPool.getFilenameSuffix(); | filePath += fShmAudioPool.getFilenameSuffix(); | ||||
| @@ -1143,7 +1142,7 @@ public: | |||||
| CarlaString dataBase64 = CarlaString::asBase64(data, dataSize); | CarlaString dataBase64 = CarlaString::asBase64(data, dataSize); | ||||
| CARLA_SAFE_ASSERT_BREAK(dataBase64.length() > 0); | CARLA_SAFE_ASSERT_BREAK(dataBase64.length() > 0); | ||||
| String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| water::String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; | filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; | ||||
| filePath += fShmAudioPool.getFilenameSuffix(); | filePath += fShmAudioPool.getFilenameSuffix(); | ||||
| @@ -38,7 +38,6 @@ | |||||
| using water::File; | using water::File; | ||||
| using water::MemoryOutputStream; | using water::MemoryOutputStream; | ||||
| using water::String; | |||||
| using water::XmlDocument; | using water::XmlDocument; | ||||
| using water::XmlElement; | using water::XmlElement; | ||||
| @@ -1520,7 +1519,7 @@ protected: | |||||
| pData->runner.start(); | pData->runner.start(); | ||||
| fOptionsForced = true; | fOptionsForced = true; | ||||
| const String state(data); | |||||
| const water::String state(data); | |||||
| XmlDocument xml(state); | XmlDocument xml(state); | ||||
| loadProjectInternal(xml, true); | loadProjectInternal(xml, true); | ||||
| @@ -24,7 +24,6 @@ using water::CharPointer_UTF8; | |||||
| using water::File; | using water::File; | ||||
| using water::MemoryOutputStream; | using water::MemoryOutputStream; | ||||
| using water::Result; | using water::Result; | ||||
| using water::String; | |||||
| using water::XmlDocument; | using water::XmlDocument; | ||||
| using water::XmlElement; | using water::XmlElement; | ||||
| @@ -1126,8 +1125,8 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path) | |||||
| for (uint32_t i=1; i<midiIns; ++i) | for (uint32_t i=1; i<midiIns; ++i) | ||||
| { | { | ||||
| const String portIndexNum(portIndex++); | |||||
| const String portIndexLabel(portIndex); | |||||
| const water::String portIndexNum(portIndex++); | |||||
| const water::String portIndexLabel(portIndex); | |||||
| mainStream << " lv2:port [\n"; | mainStream << " lv2:port [\n"; | ||||
| mainStream << " a lv2:InputPort, atom:AtomPort ;\n"; | mainStream << " a lv2:InputPort, atom:AtomPort ;\n"; | ||||
| @@ -1152,8 +1151,8 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path) | |||||
| for (uint32_t i=0; i<midiOuts; ++i) | for (uint32_t i=0; i<midiOuts; ++i) | ||||
| { | { | ||||
| const String portIndexNum(portIndex++); | |||||
| const String portIndexLabel(portIndex); | |||||
| const water::String portIndexNum(portIndex++); | |||||
| const water::String portIndexLabel(portIndex); | |||||
| mainStream << " lv2:port [\n"; | mainStream << " lv2:port [\n"; | ||||
| mainStream << " a lv2:InputPort, atom:AtomPort ;\n"; | mainStream << " a lv2:InputPort, atom:AtomPort ;\n"; | ||||
| @@ -1180,8 +1179,8 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path) | |||||
| for (uint32_t i=0; i<pData->audioIn.count; ++i) | for (uint32_t i=0; i<pData->audioIn.count; ++i) | ||||
| { | { | ||||
| const String portIndexNum(portIndex++); | |||||
| const String portIndexLabel(i+1); | |||||
| const water::String portIndexNum(portIndex++); | |||||
| const water::String portIndexLabel(i+1); | |||||
| mainStream << " lv2:port [\n"; | mainStream << " lv2:port [\n"; | ||||
| mainStream << " a lv2:InputPort, lv2:AudioPort ;\n"; | mainStream << " a lv2:InputPort, lv2:AudioPort ;\n"; | ||||
| @@ -1193,8 +1192,8 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path) | |||||
| for (uint32_t i=0; i<pData->audioOut.count; ++i) | for (uint32_t i=0; i<pData->audioOut.count; ++i) | ||||
| { | { | ||||
| const String portIndexNum(portIndex++); | |||||
| const String portIndexLabel(i+1); | |||||
| const water::String portIndexNum(portIndex++); | |||||
| const water::String portIndexLabel(i+1); | |||||
| mainStream << " lv2:port [\n"; | mainStream << " lv2:port [\n"; | ||||
| mainStream << " a lv2:OutputPort, lv2:AudioPort ;\n"; | mainStream << " a lv2:OutputPort, lv2:AudioPort ;\n"; | ||||
| @@ -1216,7 +1215,7 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path) | |||||
| const ParameterData& paramData(pData->param.data[i]); | const ParameterData& paramData(pData->param.data[i]); | ||||
| const ParameterRanges& paramRanges(pData->param.ranges[i]); | const ParameterRanges& paramRanges(pData->param.ranges[i]); | ||||
| const String portIndexNum(portIndex++); | |||||
| const water::String portIndexNum(portIndex++); | |||||
| mainStream << " lv2:port [\n"; | mainStream << " lv2:port [\n"; | ||||
| @@ -27,8 +27,6 @@ | |||||
| using water::ChildProcess; | using water::ChildProcess; | ||||
| using water::File; | using water::File; | ||||
| using water::String; | |||||
| using water::StringArray; | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -40,17 +38,17 @@ static const ExternalMidiNote kExternalMidiNoteFallback = { -1, 0, 0 }; | |||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| #ifndef CARLA_OS_WIN | #ifndef CARLA_OS_WIN | ||||
| static String findWinePrefix(const String filename, const int recursionLimit = 10) | |||||
| static water::String findWinePrefix(const water::String filename, const int recursionLimit = 10) | |||||
| { | { | ||||
| if (recursionLimit == 0 || filename.length() < 5 || ! filename.contains("/")) | if (recursionLimit == 0 || filename.length() < 5 || ! filename.contains("/")) | ||||
| return ""; | |||||
| return {}; | |||||
| const String path(filename.upToLastOccurrenceOf("/", false, false)); | |||||
| const water::String path(filename.upToLastOccurrenceOf("/", false, false)); | |||||
| if (File(String(path + "/dosdevices").toRawUTF8()).isDirectory()) | |||||
| if (File(water::String(path + "/dosdevices").toRawUTF8()).isDirectory()) | |||||
| return path; | return path; | ||||
| return findWinePrefix(path, recursionLimit-1); | |||||
| return findWinePrefix(path, recursionLimit - 1); | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -172,18 +170,18 @@ protected: | |||||
| const EngineOptions& options(kEngine->getOptions()); | const EngineOptions& options(kEngine->getOptions()); | ||||
| String filename(kPlugin->getFilename()); | |||||
| water::String filename(kPlugin->getFilename()); | |||||
| if (filename.isEmpty()) | if (filename.isEmpty()) | ||||
| filename = "(none)"; | filename = "(none)"; | ||||
| StringArray arguments; | |||||
| water::StringArray arguments; | |||||
| #ifndef CARLA_OS_WIN | #ifndef CARLA_OS_WIN | ||||
| // start with "wine" if needed | // start with "wine" if needed | ||||
| if (fBridgeBinary.endsWithIgnoreCase(".exe")) | if (fBridgeBinary.endsWithIgnoreCase(".exe")) | ||||
| { | { | ||||
| String wineCMD; | |||||
| water::String wineCMD; | |||||
| if (options.wine.executable != nullptr && options.wine.executable[0] != '\0') | if (options.wine.executable != nullptr && options.wine.executable[0] != '\0') | ||||
| { | { | ||||
| @@ -191,7 +189,7 @@ protected: | |||||
| if (fBridgeBinary.endsWithIgnoreCase("64.exe") | if (fBridgeBinary.endsWithIgnoreCase("64.exe") | ||||
| && options.wine.executable[0] == CARLA_OS_SEP | && options.wine.executable[0] == CARLA_OS_SEP | ||||
| && File(String(wineCMD + "64").toRawUTF8()).existsAsFile()) | |||||
| && File(water::String(wineCMD + "64").toRawUTF8()).existsAsFile()) | |||||
| wineCMD += "64"; | wineCMD += "64"; | ||||
| } | } | ||||
| else | else | ||||
| @@ -227,7 +225,7 @@ protected: | |||||
| arguments.add(fLabel); | arguments.add(fLabel); | ||||
| // uniqueId | // uniqueId | ||||
| arguments.add(String(static_cast<water::int64>(kPlugin->getUniqueId()))); | |||||
| arguments.add(water::String(static_cast<water::int64>(kPlugin->getUniqueId()))); | |||||
| bool started; | bool started; | ||||
| @@ -412,10 +410,10 @@ private: | |||||
| CarlaEngine* const kEngine; | CarlaEngine* const kEngine; | ||||
| CarlaPlugin* const kPlugin; | CarlaPlugin* const kPlugin; | ||||
| String fBinaryArchName; | |||||
| String fBridgeBinary; | |||||
| String fLabel; | |||||
| String fShmIds; | |||||
| water::String fBinaryArchName; | |||||
| water::String fBridgeBinary; | |||||
| water::String fLabel; | |||||
| water::String fShmIds; | |||||
| #ifndef CARLA_OS_WIN | #ifndef CARLA_OS_WIN | ||||
| CarlaString fWinePrefix; | CarlaString fWinePrefix; | ||||
| #endif | #endif | ||||
| @@ -978,7 +976,7 @@ public: | |||||
| { | { | ||||
| if (valueLen > maxLocalValueLen) | if (valueLen > maxLocalValueLen) | ||||
| { | { | ||||
| String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| water::String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| filePath += CARLA_OS_SEP_STR ".CarlaCustomData_"; | filePath += CARLA_OS_SEP_STR ".CarlaCustomData_"; | ||||
| filePath += fShmAudioPool.getFilenameSuffix(); | filePath += fShmAudioPool.getFilenameSuffix(); | ||||
| @@ -1016,7 +1014,7 @@ public: | |||||
| CarlaString dataBase64(CarlaString::asBase64(data, dataSize)); | CarlaString dataBase64(CarlaString::asBase64(data, dataSize)); | ||||
| CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0,); | CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0,); | ||||
| String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| water::String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; | filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; | ||||
| filePath += fShmAudioPool.getFilenameSuffix(); | filePath += fShmAudioPool.getFilenameSuffix(); | ||||
| @@ -2518,13 +2516,13 @@ public: | |||||
| { | { | ||||
| const BridgeTextReader bigValueFilePath(fShmNonRtServerControl); | const BridgeTextReader bigValueFilePath(fShmNonRtServerControl); | ||||
| String realBigValueFilePath(bigValueFilePath.text); | |||||
| water::String realBigValueFilePath(bigValueFilePath.text); | |||||
| #ifndef CARLA_OS_WIN | #ifndef CARLA_OS_WIN | ||||
| // Using Wine, fix temp dir | // Using Wine, fix temp dir | ||||
| if (fBinaryType == BINARY_WIN32 || fBinaryType == BINARY_WIN64) | if (fBinaryType == BINARY_WIN32 || fBinaryType == BINARY_WIN64) | ||||
| { | { | ||||
| const StringArray driveLetterSplit(StringArray::fromTokens(realBigValueFilePath, ":/", "")); | |||||
| const water::StringArray driveLetterSplit(water::StringArray::fromTokens(realBigValueFilePath, ":/", "")); | |||||
| carla_stdout("big value save path BEFORE => '%s' | using wineprefix '%s'", realBigValueFilePath.toRawUTF8(), fWinePrefix.buffer()); | carla_stdout("big value save path BEFORE => '%s' | using wineprefix '%s'", realBigValueFilePath.toRawUTF8(), fWinePrefix.buffer()); | ||||
| realBigValueFilePath = fWinePrefix.buffer(); | realBigValueFilePath = fWinePrefix.buffer(); | ||||
| @@ -2559,13 +2557,13 @@ public: | |||||
| // chunkFilePath | // chunkFilePath | ||||
| const BridgeTextReader chunkFilePath(fShmNonRtServerControl); | const BridgeTextReader chunkFilePath(fShmNonRtServerControl); | ||||
| String realChunkFilePath(chunkFilePath.text); | |||||
| water::String realChunkFilePath(chunkFilePath.text); | |||||
| #ifndef CARLA_OS_WIN | #ifndef CARLA_OS_WIN | ||||
| // Using Wine, fix temp dir | // Using Wine, fix temp dir | ||||
| if (fBinaryType == BINARY_WIN32 || fBinaryType == BINARY_WIN64) | if (fBinaryType == BINARY_WIN32 || fBinaryType == BINARY_WIN64) | ||||
| { | { | ||||
| const StringArray driveLetterSplit(StringArray::fromTokens(realChunkFilePath, ":/", "")); | |||||
| const water::StringArray driveLetterSplit(water::StringArray::fromTokens(realChunkFilePath, ":/", "")); | |||||
| carla_stdout("chunk save path BEFORE => '%s' | using wineprefix '%s'", realChunkFilePath.toRawUTF8(), fWinePrefix.buffer()); | carla_stdout("chunk save path BEFORE => '%s' | using wineprefix '%s'", realChunkFilePath.toRawUTF8(), fWinePrefix.buffer()); | ||||
| realChunkFilePath = fWinePrefix.buffer(); | realChunkFilePath = fWinePrefix.buffer(); | ||||
| @@ -3227,7 +3225,7 @@ private: | |||||
| CarlaString dataBase64(CarlaString::asBase64(data, dataSize)); | CarlaString dataBase64(CarlaString::asBase64(data, dataSize)); | ||||
| CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0, true); | CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0, true); | ||||
| String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| water::String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | |||||
| filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; | filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; | ||||
| filePath += fShmAudioPool.getFilenameSuffix(); | filePath += fShmAudioPool.getFilenameSuffix(); | ||||
| @@ -1,19 +1,5 @@ | |||||
| /* | |||||
| * Carla FluidSynth Plugin | |||||
| * Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #include "CarlaPluginInternal.hpp" | #include "CarlaPluginInternal.hpp" | ||||
| #include "CarlaEngine.hpp" | #include "CarlaEngine.hpp" | ||||
| @@ -29,9 +15,6 @@ | |||||
| #define FLUID_DEFAULT_POLYPHONY 64 | #define FLUID_DEFAULT_POLYPHONY 64 | ||||
| using water::String; | |||||
| using water::StringArray; | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| // ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
| @@ -519,12 +502,12 @@ public: | |||||
| if (std::strcmp(key, "midiPrograms") != 0) | if (std::strcmp(key, "midiPrograms") != 0) | ||||
| return carla_stderr2("CarlaPluginFluidSynth::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); | return carla_stderr2("CarlaPluginFluidSynth::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); | ||||
| StringArray midiProgramList(StringArray::fromTokens(value, ":", "")); | |||||
| water::StringArray midiProgramList(water::StringArray::fromTokens(value, ":", "")); | |||||
| if (midiProgramList.size() == MAX_MIDI_CHANNELS) | if (midiProgramList.size() == MAX_MIDI_CHANNELS) | ||||
| { | { | ||||
| uint8_t channel = 0; | uint8_t channel = 0; | ||||
| for (String *it=midiProgramList.begin(), *end=midiProgramList.end(); it != end; ++it) | |||||
| for (water::String *it=midiProgramList.begin(), *end=midiProgramList.end(); it != end; ++it) | |||||
| { | { | ||||
| const int index(it->getIntValue()); | const int index(it->getIntValue()); | ||||
| @@ -36,8 +36,6 @@ | |||||
| using water::ChildProcess; | using water::ChildProcess; | ||||
| using water::File; | using water::File; | ||||
| using water::String; | |||||
| using water::StringArray; | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -333,15 +331,15 @@ protected: | |||||
| carla_stderr("CarlaPluginJackThread::run() - already running"); | carla_stderr("CarlaPluginJackThread::run() - already running"); | ||||
| } | } | ||||
| String name(kPlugin->getName()); | |||||
| String filename(kPlugin->getFilename()); | |||||
| water::String name(kPlugin->getName()); | |||||
| water::String filename(kPlugin->getFilename()); | |||||
| if (name.isEmpty()) | if (name.isEmpty()) | ||||
| name = "(none)"; | name = "(none)"; | ||||
| CARLA_SAFE_ASSERT_RETURN(filename.isNotEmpty(),); | CARLA_SAFE_ASSERT_RETURN(filename.isNotEmpty(),); | ||||
| StringArray arguments; | |||||
| water::StringArray arguments; | |||||
| // binary | // binary | ||||
| arguments.addTokens(filename, true); | arguments.addTokens(filename, true); | ||||
| @@ -18,9 +18,6 @@ | |||||
| using water::ChildProcess; | using water::ChildProcess; | ||||
| #endif | #endif | ||||
| using water::String; | |||||
| using water::StringArray; | |||||
| #define CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(/* argc, types, */ argcToCompare, typesToCompare) \ | #define CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(/* argc, types, */ argcToCompare, typesToCompare) \ | ||||
| /* check argument count */ \ | /* check argument count */ \ | ||||
| if (argc != argcToCompare) \ | if (argc != argcToCompare) \ | ||||
| @@ -121,8 +118,8 @@ public: | |||||
| return; | return; | ||||
| } | } | ||||
| String name(kPlugin->getName()); | |||||
| String filename(kPlugin->getFilename()); | |||||
| water::String name(kPlugin->getName()); | |||||
| water::String filename(kPlugin->getFilename()); | |||||
| if (name.isEmpty()) | if (name.isEmpty()) | ||||
| name = "(none)"; | name = "(none)"; | ||||
| @@ -130,13 +127,13 @@ public: | |||||
| if (filename.isEmpty()) | if (filename.isEmpty()) | ||||
| filename = "\"\""; | filename = "\"\""; | ||||
| StringArray arguments; | |||||
| water::StringArray arguments; | |||||
| // binary | // binary | ||||
| arguments.add(fBinary.buffer()); | arguments.add(fBinary.buffer()); | ||||
| // osc-url | // osc-url | ||||
| arguments.add(String(kEngine->getOscServerPathUDP()) + String("/") + String(kPlugin->getId())); | |||||
| arguments.add(String(kEngine->getOscServerPathUDP()) + water::String("/") + water::String(kPlugin->getId())); | |||||
| // filename | // filename | ||||
| arguments.add(filename); | arguments.add(filename); | ||||
| @@ -1,19 +1,5 @@ | |||||
| /* | |||||
| * Carla Native Plugin | |||||
| * Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #include "CarlaPluginInternal.hpp" | #include "CarlaPluginInternal.hpp" | ||||
| #include "CarlaEngine.hpp" | #include "CarlaEngine.hpp" | ||||
| @@ -25,9 +11,6 @@ | |||||
| #include "water/misc/Time.h" | #include "water/misc/Time.h" | ||||
| #include "water/text/StringArray.h" | #include "water/text/StringArray.h" | ||||
| using water::String; | |||||
| using water::StringArray; | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // used in carla-base.cpp | // used in carla-base.cpp | ||||
| @@ -819,12 +802,12 @@ public: | |||||
| } | } | ||||
| else if (std::strcmp(key, "midiPrograms") == 0 && fDescriptor->set_midi_program != nullptr) | else if (std::strcmp(key, "midiPrograms") == 0 && fDescriptor->set_midi_program != nullptr) | ||||
| { | { | ||||
| StringArray midiProgramList(StringArray::fromTokens(value, ":", "")); | |||||
| water::StringArray midiProgramList(water::StringArray::fromTokens(value, ":", "")); | |||||
| if (midiProgramList.size() == MAX_MIDI_CHANNELS) | if (midiProgramList.size() == MAX_MIDI_CHANNELS) | ||||
| { | { | ||||
| uint8_t channel = 0; | uint8_t channel = 0; | ||||
| for (String *it=midiProgramList.begin(), *end=midiProgramList.end(); it != end; ++it) | |||||
| for (water::String *it=midiProgramList.begin(), *end=midiProgramList.end(); it != end; ++it) | |||||
| { | { | ||||
| const int index(it->getIntValue()); | const int index(it->getIntValue()); | ||||
| @@ -1,19 +1,5 @@ | |||||
| /* | |||||
| * Carla SFZero Plugin | |||||
| * Copyright (C) 2018-2023 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #include "CarlaPluginInternal.hpp" | #include "CarlaPluginInternal.hpp" | ||||
| #include "CarlaEngine.hpp" | #include "CarlaEngine.hpp" | ||||
| @@ -35,7 +21,6 @@ | |||||
| using water::AudioSampleBuffer; | using water::AudioSampleBuffer; | ||||
| using water::File; | using water::File; | ||||
| using water::MidiMessage; | using water::MidiMessage; | ||||
| using water::String; | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| @@ -713,7 +698,7 @@ public: | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| const String basename(File(filename).getFileNameWithoutExtension()); | |||||
| const water::String basename(File(filename).getFileNameWithoutExtension()); | |||||
| CarlaString label2(label != nullptr ? label : basename.toRawUTF8()); | CarlaString label2(label != nullptr ? label : basename.toRawUTF8()); | ||||
| @@ -69,8 +69,8 @@ struct CarlaPluginDiscoveryOptions { | |||||
| #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | ||||
| struct { | struct { | ||||
| bool autoPrefix; | bool autoPrefix; | ||||
| CarlaString executable; | |||||
| CarlaString fallbackPrefix; | |||||
| String executable; | |||||
| String fallbackPrefix; | |||||
| } wine; | } wine; | ||||
| #endif | #endif | ||||
| @@ -382,12 +382,12 @@ private: | |||||
| uint fBinaryIndex; | uint fBinaryIndex; | ||||
| const uint fBinaryCount; | const uint fBinaryCount; | ||||
| const std::vector<water::File> fBinaries; | const std::vector<water::File> fBinaries; | ||||
| const CarlaString fDiscoveryTool; | |||||
| const String fDiscoveryTool; | |||||
| uint32_t fLastMessageTime; | uint32_t fLastMessageTime; | ||||
| CarlaPluginDiscoveryInfo fNextInfo; | CarlaPluginDiscoveryInfo fNextInfo; | ||||
| CarlaString fNextSha1Sum; | |||||
| String fNextSha1Sum; | |||||
| char* fNextLabel; | char* fNextLabel; | ||||
| char* fNextMaker; | char* fNextMaker; | ||||
| char* fNextName; | char* fNextName; | ||||
| @@ -52,7 +52,6 @@ using CARLA_BACKEND_NAMESPACE::runMainLoopOnce; | |||||
| using water::CharPointer_UTF8; | using water::CharPointer_UTF8; | ||||
| using water::File; | using water::File; | ||||
| using water::String; | |||||
| // ------------------------------------------------------------------------- | // ------------------------------------------------------------------------- | ||||
| @@ -113,7 +112,7 @@ static void initSignalHandler() | |||||
| // ------------------------------------------------------------------------- | // ------------------------------------------------------------------------- | ||||
| static CarlaHostHandle gHostHandle; | static CarlaHostHandle gHostHandle; | ||||
| static CarlaString gProjectFilename; | |||||
| static String gProjectFilename; | |||||
| static void gIdle() | static void gIdle() | ||||
| { | { | ||||
| @@ -419,7 +418,7 @@ int main(int argc, char* argv[]) | |||||
| // --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||
| // Set client name | // Set client name | ||||
| CarlaString clientName; | |||||
| String clientName; | |||||
| if (name != nullptr) | if (name != nullptr) | ||||
| { | { | ||||
| @@ -431,7 +430,7 @@ int main(int argc, char* argv[]) | |||||
| CARLA_SAFE_ASSERT_RETURN(label != nullptr && label[0] != '\0', 1); | CARLA_SAFE_ASSERT_RETURN(label != nullptr && label[0] != '\0', 1); | ||||
| // LV2 URI is not usable as client name, create a usable name from URI | // LV2 URI is not usable as client name, create a usable name from URI | ||||
| CarlaString label2(label); | |||||
| String label2(label); | |||||
| // truncate until last valid char | // truncate until last valid char | ||||
| for (std::size_t i=label2.length()-1; i != 0; --i) | for (std::size_t i=label2.length()-1; i != 0; --i) | ||||
| @@ -545,7 +544,7 @@ int main(int argc, char* argv[]) | |||||
| { | { | ||||
| if (sched_setscheduler(0, SCHED_RR|SCHED_RESET_ON_FORK, &sparam) < 0) | if (sched_setscheduler(0, SCHED_RR|SCHED_RESET_ON_FORK, &sparam) < 0) | ||||
| { | { | ||||
| CarlaString error(std::strerror(errno)); | |||||
| String error(std::strerror(errno)); | |||||
| carla_stderr("Failed to set high priority, error %i: %s", errno, error.buffer()); | carla_stderr("Failed to set high priority, error %i: %s", errno, error.buffer()); | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,19 +1,5 @@ | |||||
| /* | |||||
| * Carla LV2 Single Plugin | |||||
| * Copyright (C) 2017-2024 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
| # error This file should not be compiled if not building bridge | # error This file should not be compiled if not building bridge | ||||
| @@ -57,10 +43,10 @@ public: | |||||
| return; | return; | ||||
| // xxxxx | // xxxxx | ||||
| CarlaString binaryDir(bundlePath); | |||||
| String binaryDir(bundlePath); | |||||
| binaryDir += CARLA_OS_SEP_STR "bin" CARLA_OS_SEP_STR; | binaryDir += CARLA_OS_SEP_STR "bin" CARLA_OS_SEP_STR; | ||||
| CarlaString resourceDir(bundlePath); | |||||
| String resourceDir(bundlePath); | |||||
| resourceDir += CARLA_OS_SEP_STR "res" CARLA_OS_SEP_STR; | resourceDir += CARLA_OS_SEP_STR "res" CARLA_OS_SEP_STR; | ||||
| pData->bufferSize = fBufferSize; | pData->bufferSize = fBufferSize; | ||||
| @@ -79,8 +65,8 @@ public: | |||||
| if (pData->options.binaryDir != nullptr) | if (pData->options.binaryDir != nullptr) | ||||
| delete[] pData->options.binaryDir; | delete[] pData->options.binaryDir; | ||||
| pData->options.binaryDir = binaryDir.dup(); | |||||
| pData->options.resourceDir = resourceDir.dup(); | |||||
| pData->options.binaryDir = carla_strdup(binaryDir); | |||||
| pData->options.resourceDir = carla_strdup(resourceDir); | |||||
| setCallback(_engine_callback, this); | setCallback(_engine_callback, this); | ||||
| @@ -695,17 +681,17 @@ const LV2_Descriptor* lv2_descriptor(uint32_t index) | |||||
| if (index != 0) | if (index != 0) | ||||
| return nullptr; | return nullptr; | ||||
| static CarlaString ret; | |||||
| static String ret; | |||||
| if (ret.isEmpty()) | if (ret.isEmpty()) | ||||
| { | { | ||||
| using namespace water; | using namespace water; | ||||
| const File file(File::getSpecialLocation(File::currentExecutableFile).withFileExtension("ttl")); | const File file(File::getSpecialLocation(File::currentExecutableFile).withFileExtension("ttl")); | ||||
| #ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
| ret = String("file:///" + file.getFullPathName()).toRawUTF8(); | |||||
| ret = water::String("file:///" + file.getFullPathName()).toRawUTF8(); | |||||
| ret.replace('\\','/'); | ret.replace('\\','/'); | ||||
| #else | #else | ||||
| ret = String("file://" + file.getFullPathName()).toRawUTF8(); | |||||
| ret = water::String("file://" + file.getFullPathName()).toRawUTF8(); | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -730,16 +716,16 @@ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index) | |||||
| { | { | ||||
| carla_debug("lv2ui_descriptor(%i)", index); | carla_debug("lv2ui_descriptor(%i)", index); | ||||
| static CarlaString ret; | |||||
| static String ret; | |||||
| { | { | ||||
| using namespace water; | using namespace water; | ||||
| const File file(File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("ext-ui")); | const File file(File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("ext-ui")); | ||||
| #ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
| ret = String("file:///" + file.getFullPathName()).toRawUTF8(); | |||||
| ret = water::String("file:///" + file.getFullPathName()).toRawUTF8(); | |||||
| ret.replace('\\','/'); | ret.replace('\\','/'); | ||||
| #else | #else | ||||
| ret = String("file://" + file.getFullPathName()).toRawUTF8(); | |||||
| ret = water::String("file://" + file.getFullPathName()).toRawUTF8(); | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -1,26 +1,14 @@ | |||||
| /* | |||||
| * Carla Backend utils | |||||
| * Copyright (C) 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #ifndef CARLA_BACKEND_UTILS_HPP_INCLUDED | #ifndef CARLA_BACKEND_UTILS_HPP_INCLUDED | ||||
| #define CARLA_BACKEND_UTILS_HPP_INCLUDED | #define CARLA_BACKEND_UTILS_HPP_INCLUDED | ||||
| #include "CarlaBackend.h" | #include "CarlaBackend.h" | ||||
| #include "CarlaNative.h" | #include "CarlaNative.h" | ||||
| #include "CarlaString.hpp" | |||||
| #include "CarlaUtils.hpp" | |||||
| #include "distrho/extra/String.hpp" | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -613,7 +601,7 @@ BinaryType getBinaryTypeFromString(const char* const ctype) noexcept | |||||
| CARLA_SAFE_ASSERT_RETURN(ctype != nullptr && ctype[0] != '\0', BINARY_NONE); | CARLA_SAFE_ASSERT_RETURN(ctype != nullptr && ctype[0] != '\0', BINARY_NONE); | ||||
| carla_debug("CarlaBackend::getBinaryTypeFromString(\"%s\")", ctype); | carla_debug("CarlaBackend::getBinaryTypeFromString(\"%s\")", ctype); | ||||
| CarlaString stype(ctype); | |||||
| String stype(ctype); | |||||
| if (stype.isEmpty()) | if (stype.isEmpty()) | ||||
| return BINARY_NONE; | return BINARY_NONE; | ||||
| @@ -758,7 +746,7 @@ PluginType getPluginTypeFromString(const char* const ctype) noexcept | |||||
| CARLA_SAFE_ASSERT_RETURN(ctype != nullptr && ctype[0] != '\0', PLUGIN_NONE); | CARLA_SAFE_ASSERT_RETURN(ctype != nullptr && ctype[0] != '\0', PLUGIN_NONE); | ||||
| carla_debug("CarlaBackend::getPluginTypeFromString(\"%s\")", ctype); | carla_debug("CarlaBackend::getPluginTypeFromString(\"%s\")", ctype); | ||||
| CarlaString stype(ctype); | |||||
| String stype(ctype); | |||||
| if (stype.isEmpty()) | if (stype.isEmpty()) | ||||
| return PLUGIN_NONE; | return PLUGIN_NONE; | ||||
| @@ -808,7 +796,7 @@ PluginCategory getPluginCategoryFromName(const char* const name) noexcept | |||||
| CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', PLUGIN_CATEGORY_NONE); | CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', PLUGIN_CATEGORY_NONE); | ||||
| carla_debug("CarlaBackend::getPluginCategoryFromName(\"%s\")", name); | carla_debug("CarlaBackend::getPluginCategoryFromName(\"%s\")", name); | ||||
| CarlaString sname(name); | |||||
| String sname(name); | |||||
| if (sname.isEmpty()) | if (sname.isEmpty()) | ||||
| return PLUGIN_CATEGORY_NONE; | return PLUGIN_CATEGORY_NONE; | ||||
| @@ -1,19 +1,5 @@ | |||||
| /* | |||||
| * Carla Bridge utils | |||||
| * Copyright (C) 2013-2023 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #ifndef CARLA_BRIDGE_UTILS_HPP_INCLUDED | #ifndef CARLA_BRIDGE_UTILS_HPP_INCLUDED | ||||
| #define CARLA_BRIDGE_UTILS_HPP_INCLUDED | #define CARLA_BRIDGE_UTILS_HPP_INCLUDED | ||||
| @@ -21,7 +7,8 @@ | |||||
| #include "CarlaBridgeDefines.hpp" | #include "CarlaBridgeDefines.hpp" | ||||
| #include "CarlaMutex.hpp" | #include "CarlaMutex.hpp" | ||||
| #include "CarlaRingBuffer.hpp" | #include "CarlaRingBuffer.hpp" | ||||
| #include "CarlaString.hpp" | |||||
| #include "distrho/extra/String.hpp" | |||||
| // ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
| @@ -243,7 +230,7 @@ struct BridgeNonRtServerData { | |||||
| struct CARLA_API BridgeAudioPool { | struct CARLA_API BridgeAudioPool { | ||||
| float* data; | float* data; | ||||
| std::size_t dataSize; | std::size_t dataSize; | ||||
| CarlaString filename; | |||||
| String filename; | |||||
| char shm[64]; | char shm[64]; | ||||
| bool isServer; | bool isServer; | ||||
| @@ -265,7 +252,7 @@ struct CARLA_API BridgeAudioPool { | |||||
| struct CARLA_API BridgeRtClientControl : public CarlaRingBufferControl<SmallStackBuffer> { | struct CARLA_API BridgeRtClientControl : public CarlaRingBufferControl<SmallStackBuffer> { | ||||
| BridgeRtClientData* data; | BridgeRtClientData* data; | ||||
| CarlaString filename; | |||||
| String filename; | |||||
| bool needsSemDestroy; // client only | bool needsSemDestroy; // client only | ||||
| char shm[64]; | char shm[64]; | ||||
| bool isServer; | bool isServer; | ||||
| @@ -305,7 +292,7 @@ struct CARLA_API BridgeRtClientControl : public CarlaRingBufferControl<SmallStac | |||||
| struct CARLA_API BridgeNonRtClientControl : public CarlaRingBufferControl<BigStackBuffer> { | struct CARLA_API BridgeNonRtClientControl : public CarlaRingBufferControl<BigStackBuffer> { | ||||
| BridgeNonRtClientData* data; | BridgeNonRtClientData* data; | ||||
| CarlaString filename; | |||||
| String filename; | |||||
| CarlaMutex mutex; | CarlaMutex mutex; | ||||
| char shm[64]; | char shm[64]; | ||||
| bool isServer; | bool isServer; | ||||
| @@ -334,7 +321,7 @@ struct CARLA_API BridgeNonRtClientControl : public CarlaRingBufferControl<BigSta | |||||
| struct CARLA_API BridgeNonRtServerControl : public CarlaRingBufferControl<HugeStackBuffer> { | struct CARLA_API BridgeNonRtServerControl : public CarlaRingBufferControl<HugeStackBuffer> { | ||||
| BridgeNonRtServerData* data; | BridgeNonRtServerData* data; | ||||
| CarlaString filename; | |||||
| String filename; | |||||
| CarlaMutex mutex; | CarlaMutex mutex; | ||||
| char shm[64]; | char shm[64]; | ||||
| bool isServer; | bool isServer; | ||||
| @@ -1,19 +1,5 @@ | |||||
| /* | |||||
| * Carla State utils | |||||
| * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #include "CarlaStateUtils.hpp" | #include "CarlaStateUtils.hpp" | ||||
| @@ -27,7 +13,6 @@ | |||||
| #include <string> | #include <string> | ||||
| using water::MemoryOutputStream; | using water::MemoryOutputStream; | ||||
| using water::String; | |||||
| using water::XmlElement; | using water::XmlElement; | ||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -35,7 +20,7 @@ CARLA_BACKEND_START_NAMESPACE | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // getNewLineSplittedString | // getNewLineSplittedString | ||||
| static void getNewLineSplittedString(MemoryOutputStream& stream, const String& string) | |||||
| static void getNewLineSplittedString(MemoryOutputStream& stream, const water::String& string) | |||||
| { | { | ||||
| static const int kLineWidth = 120; | static const int kLineWidth = 120; | ||||
| @@ -109,7 +94,7 @@ static const char* xmlSafeStringCharDup(const char* const cstring, const bool to | |||||
| } | } | ||||
| */ | */ | ||||
| static const char* xmlSafeStringCharDup(const String& string, const bool toXml) | |||||
| static const char* xmlSafeStringCharDup(const water::String& string, const bool toXml) | |||||
| { | { | ||||
| return carla_strdup(xmlSafeString(string, toXml).toRawUTF8()); | return carla_strdup(xmlSafeString(string, toXml).toRawUTF8()); | ||||
| } | } | ||||
| @@ -292,7 +277,7 @@ bool CarlaStateSave::fillFromXmlElement(const XmlElement* const xmlElement) | |||||
| for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) | for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) | ||||
| { | { | ||||
| const String& tagName(elem->getTagName()); | |||||
| const water::String& tagName(elem->getTagName()); | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Info | // Info | ||||
| @@ -301,8 +286,8 @@ bool CarlaStateSave::fillFromXmlElement(const XmlElement* const xmlElement) | |||||
| { | { | ||||
| for (XmlElement* xmlInfo = elem->getFirstChildElement(); xmlInfo != nullptr; xmlInfo = xmlInfo->getNextElement()) | for (XmlElement* xmlInfo = elem->getFirstChildElement(); xmlInfo != nullptr; xmlInfo = xmlInfo->getNextElement()) | ||||
| { | { | ||||
| const String& tag(xmlInfo->getTagName()); | |||||
| const String text(xmlInfo->getAllSubText().trim()); | |||||
| const water::String& tag(xmlInfo->getTagName()); | |||||
| const water::String text(xmlInfo->getAllSubText().trim()); | |||||
| /**/ if (tag == "Type") | /**/ if (tag == "Type") | ||||
| type = xmlSafeStringCharDup(text, false); | type = xmlSafeStringCharDup(text, false); | ||||
| @@ -324,8 +309,8 @@ bool CarlaStateSave::fillFromXmlElement(const XmlElement* const xmlElement) | |||||
| { | { | ||||
| for (XmlElement* xmlData = elem->getFirstChildElement(); xmlData != nullptr; xmlData = xmlData->getNextElement()) | for (XmlElement* xmlData = elem->getFirstChildElement(); xmlData != nullptr; xmlData = xmlData->getNextElement()) | ||||
| { | { | ||||
| const String& tag(xmlData->getTagName()); | |||||
| const String text(xmlData->getAllSubText().trim()); | |||||
| const water::String& tag(xmlData->getTagName()); | |||||
| const water::String text(xmlData->getAllSubText().trim()); | |||||
| // ------------------------------------------------------- | // ------------------------------------------------------- | ||||
| // Internal Data | // Internal Data | ||||
| @@ -414,8 +399,8 @@ bool CarlaStateSave::fillFromXmlElement(const XmlElement* const xmlElement) | |||||
| for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) | for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) | ||||
| { | { | ||||
| const String& pTag(xmlSubData->getTagName()); | |||||
| const String pText(xmlSubData->getAllSubText().trim()); | |||||
| const water::String& pTag(xmlSubData->getTagName()); | |||||
| const water::String pText(xmlSubData->getAllSubText().trim()); | |||||
| /**/ if (pTag == "Index") | /**/ if (pTag == "Index") | ||||
| { | { | ||||
| @@ -487,7 +472,7 @@ bool CarlaStateSave::fillFromXmlElement(const XmlElement* const xmlElement) | |||||
| // find type first | // find type first | ||||
| for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) | for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) | ||||
| { | { | ||||
| const String& cTag(xmlSubData->getTagName()); | |||||
| const water::String& cTag(xmlSubData->getTagName()); | |||||
| if (cTag != "Type") | if (cTag != "Type") | ||||
| continue; | continue; | ||||
| @@ -506,8 +491,8 @@ bool CarlaStateSave::fillFromXmlElement(const XmlElement* const xmlElement) | |||||
| // now fill in key and value, knowing what the type is | // now fill in key and value, knowing what the type is | ||||
| for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) | for (XmlElement* xmlSubData = xmlData->getFirstChildElement(); xmlSubData != nullptr; xmlSubData = xmlSubData->getNextElement()) | ||||
| { | { | ||||
| const String& cTag(xmlSubData->getTagName()); | |||||
| String cText(xmlSubData->getAllSubText()); | |||||
| const water::String& cTag(xmlSubData->getTagName()); | |||||
| water::String cText(xmlSubData->getAllSubText()); | |||||
| /**/ if (cTag == "Key") | /**/ if (cTag == "Key") | ||||
| { | { | ||||
| @@ -563,7 +548,7 @@ void CarlaStateSave::dumpToMemoryStream(MemoryOutputStream& content) const | |||||
| MemoryOutputStream infoXml; | MemoryOutputStream infoXml; | ||||
| infoXml << " <Info>\n"; | infoXml << " <Info>\n"; | ||||
| infoXml << " <Type>" << String(type != nullptr ? type : "") << "</Type>\n"; | |||||
| infoXml << " <Type>" << water::String(type != nullptr ? type : "") << "</Type>\n"; | |||||
| infoXml << " <Name>" << xmlSafeString(name, true) << "</Name>\n"; | infoXml << " <Name>" << xmlSafeString(name, true) << "</Name>\n"; | ||||
| switch (pluginType) | switch (pluginType) | ||||
| @@ -633,22 +618,22 @@ void CarlaStateSave::dumpToMemoryStream(MemoryOutputStream& content) const | |||||
| dataXml << " <Active>" << (active ? "Yes" : "No") << "</Active>\n"; | dataXml << " <Active>" << (active ? "Yes" : "No") << "</Active>\n"; | ||||
| if (carla_isNotEqual(dryWet, 1.0f)) | if (carla_isNotEqual(dryWet, 1.0f)) | ||||
| dataXml << " <DryWet>" << String(dryWet, 7) << "</DryWet>\n"; | |||||
| dataXml << " <DryWet>" << water::String(dryWet, 7) << "</DryWet>\n"; | |||||
| if (carla_isNotEqual(volume, 1.0f)) | if (carla_isNotEqual(volume, 1.0f)) | ||||
| dataXml << " <Volume>" << String(volume, 7) << "</Volume>\n"; | |||||
| dataXml << " <Volume>" << water::String(volume, 7) << "</Volume>\n"; | |||||
| if (carla_isNotEqual(balanceLeft, -1.0f)) | if (carla_isNotEqual(balanceLeft, -1.0f)) | ||||
| dataXml << " <Balance-Left>" << String(balanceLeft, 7) << "</Balance-Left>\n"; | |||||
| dataXml << " <Balance-Left>" << water::String(balanceLeft, 7) << "</Balance-Left>\n"; | |||||
| if (carla_isNotEqual(balanceRight, 1.0f)) | if (carla_isNotEqual(balanceRight, 1.0f)) | ||||
| dataXml << " <Balance-Right>" << String(balanceRight, 7) << "</Balance-Right>\n"; | |||||
| dataXml << " <Balance-Right>" << water::String(balanceRight, 7) << "</Balance-Right>\n"; | |||||
| if (carla_isNotEqual(panning, 0.0f)) | if (carla_isNotEqual(panning, 0.0f)) | ||||
| dataXml << " <Panning>" << String(panning, 7) << "</Panning>\n"; | |||||
| dataXml << " <Panning>" << water::String(panning, 7) << "</Panning>\n"; | |||||
| if (ctrlChannel < 0) | if (ctrlChannel < 0) | ||||
| dataXml << " <ControlChannel>N</ControlChannel>\n"; | dataXml << " <ControlChannel>N</ControlChannel>\n"; | ||||
| else | else | ||||
| dataXml << " <ControlChannel>" << int(ctrlChannel+1) << "</ControlChannel>\n"; | dataXml << " <ControlChannel>" << int(ctrlChannel+1) << "</ControlChannel>\n"; | ||||
| dataXml << " <Options>0x" << String::toHexString(static_cast<int>(options)) << "</Options>\n"; | |||||
| dataXml << " <Options>0x" << water::String::toHexString(static_cast<int>(options)) << "</Options>\n"; | |||||
| content << dataXml; | content << dataXml; | ||||
| } | } | ||||
| @@ -663,7 +648,7 @@ void CarlaStateSave::dumpToMemoryStream(MemoryOutputStream& content) const | |||||
| parameterXml << "\n"; | parameterXml << "\n"; | ||||
| parameterXml << " <Parameter>\n"; | parameterXml << " <Parameter>\n"; | ||||
| parameterXml << " <Index>" << String(stateParameter->index) << "</Index>\n"; | |||||
| parameterXml << " <Index>" << water::String(stateParameter->index) << "</Index>\n"; | |||||
| parameterXml << " <Name>" << xmlSafeString(stateParameter->name, true) << "</Name>\n"; | parameterXml << " <Name>" << xmlSafeString(stateParameter->name, true) << "</Name>\n"; | ||||
| if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') | if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') | ||||
| @@ -682,8 +667,8 @@ void CarlaStateSave::dumpToMemoryStream(MemoryOutputStream& content) const | |||||
| if (stateParameter->mappedRangeValid) | if (stateParameter->mappedRangeValid) | ||||
| { | { | ||||
| parameterXml << " <MappedMinimum>" << String(stateParameter->mappedMinimum, 15) << "</MappedMinimum>\n"; | |||||
| parameterXml << " <MappedMaximum>" << String(stateParameter->mappedMaximum, 15) << "</MappedMaximum>\n"; | |||||
| parameterXml << " <MappedMinimum>" << water::String(stateParameter->mappedMinimum, 15) << "</MappedMinimum>\n"; | |||||
| parameterXml << " <MappedMaximum>" << water::String(stateParameter->mappedMaximum, 15) << "</MappedMaximum>\n"; | |||||
| } | } | ||||
| // backwards compatibility for older carla versions | // backwards compatibility for older carla versions | ||||
| @@ -693,7 +678,7 @@ void CarlaStateSave::dumpToMemoryStream(MemoryOutputStream& content) const | |||||
| #endif | #endif | ||||
| if (! stateParameter->dummy) | if (! stateParameter->dummy) | ||||
| parameterXml << " <Value>" << String(stateParameter->value, 15) << "</Value>\n"; | |||||
| parameterXml << " <Value>" << water::String(stateParameter->value, 15) << "</Value>\n"; | |||||
| parameterXml << " </Parameter>\n"; | parameterXml << " </Parameter>\n"; | ||||
| @@ -703,7 +688,7 @@ void CarlaStateSave::dumpToMemoryStream(MemoryOutputStream& content) const | |||||
| if (currentProgramIndex >= 0 && currentProgramName != nullptr && currentProgramName[0] != '\0') | if (currentProgramIndex >= 0 && currentProgramName != nullptr && currentProgramName[0] != '\0') | ||||
| { | { | ||||
| // ignore 'default' program | // ignore 'default' program | ||||
| if (currentProgramIndex > 0 || ! String(currentProgramName).equalsIgnoreCase("default")) | |||||
| if (currentProgramIndex > 0 || ! water::String(currentProgramName).equalsIgnoreCase("default")) | |||||
| { | { | ||||
| MemoryOutputStream programXml; | MemoryOutputStream programXml; | ||||
| @@ -1,19 +1,5 @@ | |||||
| /* | |||||
| * Carla State utils | |||||
| * Copyright (C) 2012-2023 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | |||||
| * This program is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | |||||
| * | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
| */ | |||||
| // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com> | |||||
| // SPDX-License-Identifier: GPL-2.0-or-later | |||||
| #ifndef CARLA_STATE_UTILS_HPP_INCLUDED | #ifndef CARLA_STATE_UTILS_HPP_INCLUDED | ||||
| #define CARLA_STATE_UTILS_HPP_INCLUDED | #define CARLA_STATE_UTILS_HPP_INCLUDED | ||||