Меняем тип переменной с элементами на list для ускорения операций удаления эдементов спсика

This commit is contained in:
2022-02-25 14:03:30 +03:00
parent fc7eb8acc9
commit 9ca63882af
5 changed files with 11 additions and 8 deletions

View File

@@ -2,7 +2,7 @@
#include "Global.h"
#include "classes/IoTItem.h"
extern std::vector<IoTItem*> IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров
extern std::list<IoTItem*> IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров
extern void configure(String path);
void clearConfigure();

View File

@@ -8,6 +8,7 @@
#include <TickerScheduler.h>
#include <PubSubClient.h>
#include <StringCommand.h>
#include <list>
#ifdef ESP32
#include "WiFi.h"

View File

@@ -3,7 +3,7 @@
extern IoTGpio IoTgpio;
std::vector<IoTItem*> IoTItems;
std::list<IoTItem*> IoTItems;
void* getAPI(String subtype, String params);
void configure(String path) {
@@ -38,8 +38,8 @@ void configure(String path) {
void clearConfigure() {
Serial.printf("Start clearing config\n");
for (unsigned int i = 0; i < IoTItems.size(); i++) {
if (IoTItems[i]) delete IoTItems[i];
for (std::list<IoTItem*>::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) {
if (*it) delete *it;
}
IoTItems.clear();
}

View File

@@ -94,8 +94,10 @@ void loop() {
//обновление mqtt
mqttLoop();
for (unsigned int i = 0; i < IoTItems.size(); i++) {
IoTItems[i]->loop();
// передаем управление каждому элементу конфигурации для выполнения своих функций
for (std::list<IoTItem*>::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) {
(*it)->loop();
//if ((*it)->iAmDead) delete *it;
}
handleOrder();

View File

@@ -86,8 +86,8 @@ void IoTItem::doByInterval() {}
IoTValue IoTItem::execute(String command, std::vector<IoTValue>& param) { return {}; }
IoTItem* findIoTItem(String name) { // поиск элемента модуля в существующей конфигурации
for (unsigned int i = 0; i < IoTItems.size(); i++) {
if (IoTItems[i]->getID() == name) return IoTItems[i];
for (std::list<IoTItem*>::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) {
if ((*it)->getID() == name) return *it;
}
return nullptr;