mirror of
https://github.com/esphome/esphome.git
synced 2025-09-29 00:22:21 +01:00
Merge remote-tt racking branch 'upstream/ble_server_opt' into integration
This commit is contained in:
@@ -313,10 +313,8 @@ void BLECharacteristic::remove_client_from_notify_list_(uint16_t conn_id) {
|
||||
// for the common case by swapping with the last element and popping
|
||||
for (size_t i = 0; i < this->clients_to_notify_.size(); i++) {
|
||||
if (this->clients_to_notify_[i].conn_id == conn_id) {
|
||||
// Swap with last element and pop
|
||||
if (i != this->clients_to_notify_.size() - 1) {
|
||||
this->clients_to_notify_[i] = this->clients_to_notify_.back();
|
||||
}
|
||||
// Swap with last element and pop (safe even when i is the last element)
|
||||
this->clients_to_notify_[i] = this->clients_to_notify_.back();
|
||||
this->clients_to_notify_.pop_back();
|
||||
return;
|
||||
}
|
||||
|
@@ -83,10 +83,8 @@ void BLECharacteristicSetValueActionManager::remove_listener_(BLECharacteristic
|
||||
// Since we typically have very few listeners, optimize by swapping with back and popping
|
||||
for (size_t i = 0; i < this->listeners_.size(); i++) {
|
||||
if (this->listeners_[i].characteristic == characteristic) {
|
||||
// Swap with last element and pop
|
||||
if (i != this->listeners_.size() - 1) {
|
||||
this->listeners_[i] = this->listeners_.back();
|
||||
}
|
||||
// Swap with last element and pop (safe even when i is the last element)
|
||||
this->listeners_[i] = this->listeners_.back();
|
||||
this->listeners_.pop_back();
|
||||
return;
|
||||
}
|
||||
|
@@ -20,6 +20,9 @@ namespace esp32_ble_server_automations {
|
||||
using namespace esp32_ble;
|
||||
using namespace event_emitter;
|
||||
|
||||
// Invalid listener ID constant - 0 is used as sentinel value in EventEmitter
|
||||
static constexpr EventEmitterListenerID INVALID_LISTENER_ID = 0;
|
||||
|
||||
class BLETriggers {
|
||||
public:
|
||||
static Trigger<std::vector<uint8_t>, uint16_t> *create_characteristic_on_write_trigger(
|
||||
@@ -50,7 +53,7 @@ class BLECharacteristicSetValueActionManager
|
||||
return entry.listener_id;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return INVALID_LISTENER_ID;
|
||||
}
|
||||
void emit_pre_notify(BLECharacteristic *characteristic) {
|
||||
this->emit_(BLECharacteristicSetValueActionEvt::PRE_NOTIFY, characteristic);
|
||||
|
Reference in New Issue
Block a user