mirror of
https://github.com/esphome/esphome.git
synced 2026-09-13 08:17:34 +00:00
[core] Convert remaining callback registration methods to templates
Convert rotary_encoder register_listener, canbus add_callback, sdl add_key_listener, and udp add_listener from std::function to templates to avoid the heap-allocation fallback path. MQTT backend set_on_* methods are virtual and cannot be templatized.
This commit is contained in:
@@ -91,10 +91,7 @@ class Canbus : public Component {
|
||||
* - rtr If this is a remote transmission request
|
||||
* - data The message data
|
||||
*/
|
||||
void add_callback(
|
||||
std::function<void(uint32_t can_id, bool extended_id, bool rtr, const std::vector<uint8_t> &data)> callback) {
|
||||
this->callback_manager_.add(std::move(callback));
|
||||
}
|
||||
template<typename F> void add_callback(F &&callback) { this->callback_manager_.add(std::forward<F>(callback)); }
|
||||
|
||||
protected:
|
||||
template<typename... Ts> friend class CanbusSendAction;
|
||||
|
||||
@@ -90,7 +90,7 @@ class RotaryEncoderSensor : public sensor::Sensor, public Component {
|
||||
this->on_anticlockwise_callback_.add(std::forward<F>(callback));
|
||||
}
|
||||
|
||||
void register_listener(std::function<void(uint32_t)> listener) { this->listeners_.add(std::move(listener)); }
|
||||
template<typename F> void register_listener(F &&listener) { this->listeners_.add(std::forward<F>(listener)); }
|
||||
|
||||
protected:
|
||||
InternalGPIOPin *pin_a_;
|
||||
|
||||
@@ -37,11 +37,11 @@ class Sdl : public display::Display {
|
||||
int get_height() override { return this->height_; }
|
||||
float get_setup_priority() const override { return setup_priority::HARDWARE; }
|
||||
void dump_config() override { LOG_DISPLAY("", "SDL", this); }
|
||||
void add_key_listener(int32_t keycode, std::function<void(bool)> &&callback) {
|
||||
template<typename F> void add_key_listener(int32_t keycode, F &&callback) {
|
||||
if (!this->key_callbacks_.count(keycode)) {
|
||||
this->key_callbacks_[keycode] = CallbackManager<void(bool)>();
|
||||
}
|
||||
this->key_callbacks_[keycode].add(std::move(callback));
|
||||
this->key_callbacks_[keycode].add(std::forward<F>(callback));
|
||||
}
|
||||
|
||||
int mouse_x{};
|
||||
|
||||
@@ -28,9 +28,7 @@ class UDPComponent : public Component {
|
||||
void set_broadcast_port(uint16_t port) { this->broadcast_port_ = port; }
|
||||
void set_should_broadcast() { this->should_broadcast_ = true; }
|
||||
void set_should_listen() { this->should_listen_ = true; }
|
||||
void add_listener(std::function<void(std::span<const uint8_t>)> &&listener) {
|
||||
this->packet_listeners_.add(std::move(listener));
|
||||
}
|
||||
template<typename F> void add_listener(F &&listener) { this->packet_listeners_.add(std::forward<F>(listener)); }
|
||||
void setup() override;
|
||||
void loop() override;
|
||||
void dump_config() override;
|
||||
|
||||
Reference in New Issue
Block a user