From 5df1a223c283769db9a696cc665d9b37dc6fb1bd Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Wed, 11 Sep 2024 16:45:39 +0200 Subject: [PATCH] Pre-allocate COM vector --- wled00/bus_manager.h | 1 + wled00/cfg.cpp | 1 + wled00/set.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/wled00/bus_manager.h b/wled00/bus_manager.h index 3411f4e62c..c3ebcad618 100644 --- a/wled00/bus_manager.h +++ b/wled00/bus_manager.h @@ -35,6 +35,7 @@ struct ColorOrderMap { bool add(uint16_t start, uint16_t len, uint8_t colorOrder); inline uint8_t count() const { return _mappings.size(); } + inline void reserve(size_t num) { _mappings.reserve(num); } void reset() { _mappings.clear(); diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 5f0c8593f1..bcb6f7aadf 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -244,6 +244,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { // read color order map configuration JsonArray hw_com = hw[F("com")]; if (!hw_com.isNull()) { + BusManager::getColorOrderMap().reserve(std::min(hw_com.size(), (size_t)WLED_MAX_COLOR_ORDER_MAPPINGS)); for (JsonObject entry : hw_com) { uint16_t start = entry["start"] | 0; uint16_t len = entry["len"] | 0; diff --git a/wled00/set.cpp b/wled00/set.cpp index 7be27ed206..a0e762e61a 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -215,6 +215,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) } //doInitBusses = busesChanged; // we will do that below to ensure all input data is processed + // we will not bother with pre-allocating ColorOrderMappings vector for (int s = 0; s < WLED_MAX_COLOR_ORDER_MAPPINGS; s++) { int offset = s < 10 ? 48 : 55; char xs[4] = "XS"; xs[2] = offset+s; xs[3] = 0; //start LED