1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-28 16:12:24 +01:00

Merge remote-tt racking branch 'upstream/ble_server_opt' into integration

This commit is contained in:
J. Nick Koston
2025-09-26 10:15:52 -05:00
3 changed files with 8 additions and 9 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);