mirror of
https://github.com/esphome/esphome.git
synced 2025-11-01 15:41:52 +00:00
[e131] Replace std::set with std::vector to reduce flash usage
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
#include "e131_addressable_light_effect.h"
|
#include "e131_addressable_light_effect.h"
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace e131 {
|
namespace e131 {
|
||||||
|
|
||||||
@@ -76,14 +78,14 @@ void E131Component::loop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void E131Component::add_effect(E131AddressableLightEffect *light_effect) {
|
void E131Component::add_effect(E131AddressableLightEffect *light_effect) {
|
||||||
if (light_effects_.count(light_effect)) {
|
if (std::find(light_effects_.begin(), light_effects_.end(), light_effect) != light_effects_.end()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESP_LOGD(TAG, "Registering '%s' for universes %d-%d.", light_effect->get_name(), light_effect->get_first_universe(),
|
ESP_LOGD(TAG, "Registering '%s' for universes %d-%d.", light_effect->get_name(), light_effect->get_first_universe(),
|
||||||
light_effect->get_last_universe());
|
light_effect->get_last_universe());
|
||||||
|
|
||||||
light_effects_.insert(light_effect);
|
light_effects_.push_back(light_effect);
|
||||||
|
|
||||||
for (auto universe = light_effect->get_first_universe(); universe <= light_effect->get_last_universe(); ++universe) {
|
for (auto universe = light_effect->get_first_universe(); universe <= light_effect->get_last_universe(); ++universe) {
|
||||||
join_(universe);
|
join_(universe);
|
||||||
@@ -91,14 +93,17 @@ void E131Component::add_effect(E131AddressableLightEffect *light_effect) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void E131Component::remove_effect(E131AddressableLightEffect *light_effect) {
|
void E131Component::remove_effect(E131AddressableLightEffect *light_effect) {
|
||||||
if (!light_effects_.count(light_effect)) {
|
auto it = std::find(light_effects_.begin(), light_effects_.end(), light_effect);
|
||||||
|
if (it == light_effects_.end()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESP_LOGD(TAG, "Unregistering '%s' for universes %d-%d.", light_effect->get_name(), light_effect->get_first_universe(),
|
ESP_LOGD(TAG, "Unregistering '%s' for universes %d-%d.", light_effect->get_name(), light_effect->get_first_universe(),
|
||||||
light_effect->get_last_universe());
|
light_effect->get_last_universe());
|
||||||
|
|
||||||
light_effects_.erase(light_effect);
|
// Swap with last element and pop for O(1) removal (order doesn't matter)
|
||||||
|
*it = light_effects_.back();
|
||||||
|
light_effects_.pop_back();
|
||||||
|
|
||||||
for (auto universe = light_effect->get_first_universe(); universe <= light_effect->get_last_universe(); ++universe) {
|
for (auto universe = light_effect->get_first_universe(); universe <= light_effect->get_last_universe(); ++universe) {
|
||||||
leave_(universe);
|
leave_(universe);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <set>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
@@ -47,9 +46,8 @@ class E131Component : public esphome::Component {
|
|||||||
|
|
||||||
E131ListenMethod listen_method_{E131_MULTICAST};
|
E131ListenMethod listen_method_{E131_MULTICAST};
|
||||||
std::unique_ptr<socket::Socket> socket_;
|
std::unique_ptr<socket::Socket> socket_;
|
||||||
std::set<E131AddressableLightEffect *> light_effects_;
|
std::vector<E131AddressableLightEffect *> light_effects_;
|
||||||
std::map<int, int> universe_consumers_;
|
std::map<int, int> universe_consumers_;
|
||||||
std::map<int, E131Packet> universe_packets_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace e131
|
} // namespace e131
|
||||||
|
|||||||
Reference in New Issue
Block a user