[sprinkler] Avoid heap allocation for triggers (#13705)

This commit is contained in:
J. Nick Koston
2026-02-02 04:53:46 +01:00
committed by GitHub
parent 09b76d5e4a
commit 18c152723c
2 changed files with 12 additions and 16 deletions
+6 -10
View File
@@ -29,7 +29,7 @@ void SprinklerControllerNumber::setup() {
}
void SprinklerControllerNumber::control(float value) {
this->set_trigger_->trigger(value);
this->set_trigger_.trigger(value);
this->publish_state(value);
@@ -39,8 +39,7 @@ void SprinklerControllerNumber::control(float value) {
void SprinklerControllerNumber::dump_config() { LOG_NUMBER("", "Sprinkler Controller Number", this); }
SprinklerControllerSwitch::SprinklerControllerSwitch()
: turn_on_trigger_(new Trigger<>()), turn_off_trigger_(new Trigger<>()) {}
SprinklerControllerSwitch::SprinklerControllerSwitch() = default;
void SprinklerControllerSwitch::loop() {
// Loop is only enabled when f_ has a value (see setup())
@@ -56,11 +55,11 @@ void SprinklerControllerSwitch::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();
}
this->publish_state(state);
@@ -69,9 +68,6 @@ void SprinklerControllerSwitch::write_state(bool state) {
void SprinklerControllerSwitch::set_state_lambda(std::function<optional<bool>()> &&f) { this->f_ = f; }
float SprinklerControllerSwitch::get_setup_priority() const { return setup_priority::HARDWARE; }
Trigger<> *SprinklerControllerSwitch::get_turn_on_trigger() const { return this->turn_on_trigger_; }
Trigger<> *SprinklerControllerSwitch::get_turn_off_trigger() const { return this->turn_off_trigger_; }
void SprinklerControllerSwitch::setup() {
this->state = this->get_initial_state_with_restore_mode().value_or(false);
// Disable loop if no state lambda is set - nothing to poll
+6 -6
View File
@@ -76,7 +76,7 @@ class SprinklerControllerNumber : public number::Number, public Component {
void dump_config() override;
float get_setup_priority() const override { return setup_priority::PROCESSOR; }
Trigger<float> *get_set_trigger() const { return set_trigger_; }
Trigger<float> *get_set_trigger() { return &this->set_trigger_; }
void set_initial_value(float initial_value) { initial_value_ = initial_value; }
void set_restore_value(bool restore_value) { this->restore_value_ = restore_value; }
@@ -84,7 +84,7 @@ class SprinklerControllerNumber : public number::Number, public Component {
void control(float value) override;
float initial_value_{NAN};
bool restore_value_{true};
Trigger<float> *set_trigger_ = new Trigger<float>();
Trigger<float> set_trigger_;
ESPPreferenceObject pref_;
};
@@ -97,8 +97,8 @@ class SprinklerControllerSwitch : public switch_::Switch, public Component {
void dump_config() override;
void set_state_lambda(std::function<optional<bool>()> &&f);
Trigger<> *get_turn_on_trigger() const;
Trigger<> *get_turn_off_trigger() const;
Trigger<> *get_turn_on_trigger() { return &this->turn_on_trigger_; }
Trigger<> *get_turn_off_trigger() { return &this->turn_off_trigger_; }
void loop() override;
float get_setup_priority() const override;
@@ -107,8 +107,8 @@ class SprinklerControllerSwitch : public switch_::Switch, public Component {
void write_state(bool state) override;
optional<std::function<optional<bool>()>> f_;
Trigger<> *turn_on_trigger_;
Trigger<> *turn_off_trigger_;
Trigger<> turn_on_trigger_;
Trigger<> turn_off_trigger_;
Trigger<> *prev_trigger_{nullptr};
};