mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 23:21:54 +00:00 
			
		
		
		
	[modbus_controller] Optimize lambdas to use function pointers instead of std::function (#11566)
This commit is contained in:
		| @@ -33,8 +33,8 @@ class ModbusBinarySensor : public Component, public binary_sensor::BinarySensor, | |||||||
|  |  | ||||||
|   void dump_config() override; |   void dump_config() override; | ||||||
|  |  | ||||||
|   using transform_func_t = std::function<optional<bool>(ModbusBinarySensor *, bool, const std::vector<uint8_t> &)>; |   using transform_func_t = optional<bool> (*)(ModbusBinarySensor *, bool, const std::vector<uint8_t> &); | ||||||
|   void set_template(transform_func_t &&f) { this->transform_func_ = f; } |   void set_template(transform_func_t f) { this->transform_func_ = f; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   optional<transform_func_t> transform_func_{nullopt}; |   optional<transform_func_t> transform_func_{nullopt}; | ||||||
|   | |||||||
| @@ -31,10 +31,10 @@ class ModbusNumber : public number::Number, public Component, public SensorItem | |||||||
|   void set_parent(ModbusController *parent) { this->parent_ = parent; } |   void set_parent(ModbusController *parent) { this->parent_ = parent; } | ||||||
|   void set_write_multiply(float factor) { this->multiply_by_ = factor; } |   void set_write_multiply(float factor) { this->multiply_by_ = factor; } | ||||||
|  |  | ||||||
|   using transform_func_t = std::function<optional<float>(ModbusNumber *, float, const std::vector<uint8_t> &)>; |   using transform_func_t = optional<float> (*)(ModbusNumber *, float, const std::vector<uint8_t> &); | ||||||
|   using write_transform_func_t = std::function<optional<float>(ModbusNumber *, float, std::vector<uint16_t> &)>; |   using write_transform_func_t = optional<float> (*)(ModbusNumber *, float, std::vector<uint16_t> &); | ||||||
|   void set_template(transform_func_t &&f) { this->transform_func_ = f; } |   void set_template(transform_func_t f) { this->transform_func_ = f; } | ||||||
|   void set_write_template(write_transform_func_t &&f) { this->write_transform_func_ = f; } |   void set_write_template(write_transform_func_t f) { this->write_transform_func_ = f; } | ||||||
|   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } |   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   | |||||||
| @@ -29,8 +29,8 @@ class ModbusFloatOutput : public output::FloatOutput, public Component, public S | |||||||
|   // Do nothing |   // Do nothing | ||||||
|   void parse_and_publish(const std::vector<uint8_t> &data) override{}; |   void parse_and_publish(const std::vector<uint8_t> &data) override{}; | ||||||
|  |  | ||||||
|   using write_transform_func_t = std::function<optional<float>(ModbusFloatOutput *, float, std::vector<uint16_t> &)>; |   using write_transform_func_t = optional<float> (*)(ModbusFloatOutput *, float, std::vector<uint16_t> &); | ||||||
|   void set_write_template(write_transform_func_t &&f) { this->write_transform_func_ = f; } |   void set_write_template(write_transform_func_t f) { this->write_transform_func_ = f; } | ||||||
|   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } |   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
| @@ -60,8 +60,8 @@ class ModbusBinaryOutput : public output::BinaryOutput, public Component, public | |||||||
|   // Do nothing |   // Do nothing | ||||||
|   void parse_and_publish(const std::vector<uint8_t> &data) override{}; |   void parse_and_publish(const std::vector<uint8_t> &data) override{}; | ||||||
|  |  | ||||||
|   using write_transform_func_t = std::function<optional<bool>(ModbusBinaryOutput *, bool, std::vector<uint8_t> &)>; |   using write_transform_func_t = optional<bool> (*)(ModbusBinaryOutput *, bool, std::vector<uint8_t> &); | ||||||
|   void set_write_template(write_transform_func_t &&f) { this->write_transform_func_ = f; } |   void set_write_template(write_transform_func_t f) { this->write_transform_func_ = f; } | ||||||
|   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } |   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   | |||||||
| @@ -26,16 +26,15 @@ class ModbusSelect : public Component, public select::Select, public SensorItem | |||||||
|     this->mapping_ = std::move(mapping); |     this->mapping_ = std::move(mapping); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   using transform_func_t = |   using transform_func_t = optional<std::string> (*)(ModbusSelect *const, int64_t, const std::vector<uint8_t> &); | ||||||
|       std::function<optional<std::string>(ModbusSelect *const, int64_t, const std::vector<uint8_t> &)>; |   using write_transform_func_t = optional<int64_t> (*)(ModbusSelect *const, const std::string &, int64_t, | ||||||
|   using write_transform_func_t = |                                                        std::vector<uint16_t> &); | ||||||
|       std::function<optional<int64_t>(ModbusSelect *const, const std::string &, int64_t, std::vector<uint16_t> &)>; |  | ||||||
|  |  | ||||||
|   void set_parent(ModbusController *const parent) { this->parent_ = parent; } |   void set_parent(ModbusController *const parent) { this->parent_ = parent; } | ||||||
|   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } |   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } | ||||||
|   void set_optimistic(bool optimistic) { this->optimistic_ = optimistic; } |   void set_optimistic(bool optimistic) { this->optimistic_ = optimistic; } | ||||||
|   void set_template(transform_func_t &&f) { this->transform_func_ = f; } |   void set_template(transform_func_t f) { this->transform_func_ = f; } | ||||||
|   void set_write_template(write_transform_func_t &&f) { this->write_transform_func_ = f; } |   void set_write_template(write_transform_func_t f) { this->write_transform_func_ = f; } | ||||||
|  |  | ||||||
|   void dump_config() override; |   void dump_config() override; | ||||||
|   void parse_and_publish(const std::vector<uint8_t> &data) override; |   void parse_and_publish(const std::vector<uint8_t> &data) override; | ||||||
|   | |||||||
| @@ -25,9 +25,9 @@ class ModbusSensor : public Component, public sensor::Sensor, public SensorItem | |||||||
|  |  | ||||||
|   void parse_and_publish(const std::vector<uint8_t> &data) override; |   void parse_and_publish(const std::vector<uint8_t> &data) override; | ||||||
|   void dump_config() override; |   void dump_config() override; | ||||||
|   using transform_func_t = std::function<optional<float>(ModbusSensor *, float, const std::vector<uint8_t> &)>; |   using transform_func_t = optional<float> (*)(ModbusSensor *, float, const std::vector<uint8_t> &); | ||||||
|  |  | ||||||
|   void set_template(transform_func_t &&f) { this->transform_func_ = f; } |   void set_template(transform_func_t f) { this->transform_func_ = f; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   optional<transform_func_t> transform_func_{nullopt}; |   optional<transform_func_t> transform_func_{nullopt}; | ||||||
|   | |||||||
| @@ -34,10 +34,10 @@ class ModbusSwitch : public Component, public switch_::Switch, public SensorItem | |||||||
|   void parse_and_publish(const std::vector<uint8_t> &data) override; |   void parse_and_publish(const std::vector<uint8_t> &data) override; | ||||||
|   void set_parent(ModbusController *parent) { this->parent_ = parent; } |   void set_parent(ModbusController *parent) { this->parent_ = parent; } | ||||||
|  |  | ||||||
|   using transform_func_t = std::function<optional<bool>(ModbusSwitch *, bool, const std::vector<uint8_t> &)>; |   using transform_func_t = optional<bool> (*)(ModbusSwitch *, bool, const std::vector<uint8_t> &); | ||||||
|   using write_transform_func_t = std::function<optional<bool>(ModbusSwitch *, bool, std::vector<uint8_t> &)>; |   using write_transform_func_t = optional<bool> (*)(ModbusSwitch *, bool, std::vector<uint8_t> &); | ||||||
|   void set_template(transform_func_t &&f) { this->publish_transform_func_ = f; } |   void set_template(transform_func_t f) { this->publish_transform_func_ = f; } | ||||||
|   void set_write_template(write_transform_func_t &&f) { this->write_transform_func_ = f; } |   void set_write_template(write_transform_func_t f) { this->write_transform_func_ = f; } | ||||||
|   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } |   void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   | |||||||
| @@ -30,9 +30,8 @@ class ModbusTextSensor : public Component, public text_sensor::TextSensor, publi | |||||||
|   void dump_config() override; |   void dump_config() override; | ||||||
|  |  | ||||||
|   void parse_and_publish(const std::vector<uint8_t> &data) override; |   void parse_and_publish(const std::vector<uint8_t> &data) override; | ||||||
|   using transform_func_t = |   using transform_func_t = optional<std::string> (*)(ModbusTextSensor *, std::string, const std::vector<uint8_t> &); | ||||||
|       std::function<optional<std::string>(ModbusTextSensor *, std::string, const std::vector<uint8_t> &)>; |   void set_template(transform_func_t f) { this->transform_func_ = f; } | ||||||
|   void set_template(transform_func_t &&f) { this->transform_func_ = f; } |  | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   optional<transform_func_t> transform_func_{nullopt}; |   optional<transform_func_t> transform_func_{nullopt}; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user