Меняем тип переменной с элементами на 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 "Global.h"
#include "classes/IoTItem.h" #include "classes/IoTItem.h"
extern std::vector<IoTItem*> IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров extern std::list<IoTItem*> IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров
extern void configure(String path); extern void configure(String path);
void clearConfigure(); void clearConfigure();

View File

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

View File

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

View File

@@ -94,8 +94,10 @@ void loop() {
//обновление mqtt //обновление mqtt
mqttLoop(); 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(); handleOrder();

View File

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