From bcef37d9c392be8ef85b2fba8e571a66d363e92f Mon Sep 17 00:00:00 2001 From: Michael Geramb Date: Sat, 18 Nov 2023 22:33:45 +0100 Subject: [PATCH] Shrink vectors after adding new elements --- src/HomeSpan.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index 4b7e91a..b7f4916 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -1643,8 +1643,10 @@ boolean Span::updateDatabase(boolean updateMDNS){ for(auto acc=Accessories.begin(); acc!=Accessories.end(); acc++){ // identify all services with over-ridden loop() methods for(auto svc=(*acc)->Services.begin(); svc!=(*acc)->Services.end(); svc++){ - if((void(*)())((*svc)->*(&SpanService::loop)) != (void(*)())(&SpanService::loop)) // save pointers to services in Loops vector + if((void(*)())((*svc)->*(&SpanService::loop)) != (void(*)())(&SpanService::loop)) { // save pointers to services in Loops vector homeSpan.Loops.push_back((*svc)); + std::vector(homeSpan.Loops).swap(homeSpan.Loops); // shrink vector to fit + } } } @@ -1727,6 +1729,7 @@ SpanService::SpanService(const char *type, const char *hapName, boolean isCustom this->isCustom=isCustom; homeSpan.Accessories.back()->Services.push_back(this); + std::vector(homeSpan.Accessories.back()->Services).swap(homeSpan.Accessories.back()->Services); // shrink vector to fit accessory=homeSpan.Accessories.back(); iid=++(homeSpan.Accessories.back()->iidCount); } @@ -1781,6 +1784,7 @@ SpanService *SpanService::setHidden(){ SpanService *SpanService::addLink(SpanService *svc){ linkedServices.push_back(svc); + std::vector(linkedServices).swap(linkedServices); // shrink vector to fit return(this); } @@ -1841,6 +1845,8 @@ SpanCharacteristic::SpanCharacteristic(HapChar *hapChar, boolean isCustom){ } homeSpan.Accessories.back()->Services.back()->Characteristics.push_back(this); + std::vector(homeSpan.Accessories.back()->Services.back()->Characteristics).swap(homeSpan.Accessories.back()->Services.back()->Characteristics); // shrink vector to fit + iid=++(homeSpan.Accessories.back()->iidCount); service=homeSpan.Accessories.back()->Services.back(); aid=homeSpan.Accessories.back()->aid;