1
0
mirror of https://github.com/esphome/esphome.git synced 2026-02-08 00:31:58 +00:00

[template.switch] Avoid heap allocation for triggers (#13691)

This commit is contained in:
J. Nick Koston
2026-02-02 04:47:34 +01:00
committed by GitHub
parent 7d717a78dc
commit e420964b93
2 changed files with 12 additions and 12 deletions

View File

@@ -5,7 +5,7 @@ namespace esphome::template_ {
static const char *const TAG = "template.switch";
TemplateSwitch::TemplateSwitch() : turn_on_trigger_(new Trigger<>()), turn_off_trigger_(new Trigger<>()) {}
TemplateSwitch::TemplateSwitch() = default;
void TemplateSwitch::loop() {
auto s = this->f_();
@@ -19,11 +19,11 @@ void TemplateSwitch::write_state(bool state) {
}
if (state) {
this->prev_trigger_ = this->turn_on_trigger_;
this->turn_on_trigger_->trigger();
this->prev_trigger_ = &this->turn_on_trigger_;
this->turn_on_trigger_.trigger();
} else {
this->prev_trigger_ = this->turn_off_trigger_;
this->turn_off_trigger_->trigger();
this->prev_trigger_ = &this->turn_off_trigger_;
this->turn_off_trigger_.trigger();
}
if (this->optimistic_)
@@ -32,8 +32,8 @@ void TemplateSwitch::write_state(bool state) {
void TemplateSwitch::set_optimistic(bool optimistic) { this->optimistic_ = optimistic; }
bool TemplateSwitch::assumed_state() { return this->assumed_state_; }
float TemplateSwitch::get_setup_priority() const { return setup_priority::HARDWARE - 2.0f; }
Trigger<> *TemplateSwitch::get_turn_on_trigger() const { return this->turn_on_trigger_; }
Trigger<> *TemplateSwitch::get_turn_off_trigger() const { return this->turn_off_trigger_; }
Trigger<> *TemplateSwitch::get_turn_on_trigger() { return &this->turn_on_trigger_; }
Trigger<> *TemplateSwitch::get_turn_off_trigger() { return &this->turn_off_trigger_; }
void TemplateSwitch::setup() {
if (!this->f_.has_value())
this->disable_loop();

View File

@@ -15,8 +15,8 @@ class TemplateSwitch final : public switch_::Switch, public Component {
void dump_config() override;
template<typename F> void set_state_lambda(F &&f) { this->f_.set(std::forward<F>(f)); }
Trigger<> *get_turn_on_trigger() const;
Trigger<> *get_turn_off_trigger() const;
Trigger<> *get_turn_on_trigger();
Trigger<> *get_turn_off_trigger();
void set_optimistic(bool optimistic);
void set_assumed_state(bool assumed_state);
void loop() override;
@@ -31,9 +31,9 @@ class TemplateSwitch final : public switch_::Switch, public Component {
TemplateLambda<bool> f_;
bool optimistic_{false};
bool assumed_state_{false};
Trigger<> *turn_on_trigger_;
Trigger<> *turn_off_trigger_;
Trigger<> *prev_trigger_{nullptr};
Trigger<> turn_on_trigger_;
Trigger<> turn_off_trigger_;
Trigger<> *prev_trigger_{nullptr}; // Points to one of the above
};
} // namespace esphome::template_