mirror of
https://github.com/esphome/esphome.git
synced 2025-10-26 20:53:50 +00:00
Merge branch 'event_types' into integration
This commit is contained in:
@@ -8,12 +8,19 @@ namespace event {
|
|||||||
static const char *const TAG = "event";
|
static const char *const TAG = "event";
|
||||||
|
|
||||||
void Event::trigger(const std::string &event_type) {
|
void Event::trigger(const std::string &event_type) {
|
||||||
auto found = types_.find(event_type);
|
// Linear search - faster than std::set for small datasets (1-5 items typical)
|
||||||
if (found == types_.end()) {
|
const std::string *found = nullptr;
|
||||||
|
for (const auto &type : this->types_) {
|
||||||
|
if (type == event_type) {
|
||||||
|
found = &type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found == nullptr) {
|
||||||
ESP_LOGE(TAG, "'%s': invalid event type for trigger(): %s", this->get_name().c_str(), event_type.c_str());
|
ESP_LOGE(TAG, "'%s': invalid event type for trigger(): %s", this->get_name().c_str(), event_type.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
last_event_type = &(*found);
|
last_event_type = found;
|
||||||
ESP_LOGD(TAG, "'%s' Triggered event '%s'", this->get_name().c_str(), last_event_type->c_str());
|
ESP_LOGD(TAG, "'%s' Triggered event '%s'", this->get_name().c_str(), last_event_type->c_str());
|
||||||
this->event_callback_.call(event_type);
|
this->event_callback_.call(event_type);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <set>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "esphome/core/component.h"
|
#include "esphome/core/component.h"
|
||||||
@@ -26,13 +25,13 @@ class Event : public EntityBase, public EntityBase_DeviceClass {
|
|||||||
const std::string *last_event_type;
|
const std::string *last_event_type;
|
||||||
|
|
||||||
void trigger(const std::string &event_type);
|
void trigger(const std::string &event_type);
|
||||||
void set_event_types(const std::set<std::string> &event_types) { this->types_ = event_types; }
|
void set_event_types(const std::initializer_list<std::string> &event_types) { this->types_ = event_types; }
|
||||||
std::set<std::string> get_event_types() const { return this->types_; }
|
const FixedVector<std::string> &get_event_types() const { return this->types_; }
|
||||||
void add_on_event_callback(std::function<void(const std::string &event_type)> &&callback);
|
void add_on_event_callback(std::function<void(const std::string &event_type)> &&callback);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CallbackManager<void(const std::string &event_type)> event_callback_;
|
CallbackManager<void(const std::string &event_type)> event_callback_;
|
||||||
std::set<std::string> types_;
|
FixedVector<std::string> types_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace event
|
} // namespace event
|
||||||
|
|||||||
Reference in New Issue
Block a user