migrate callbacks from std::vector to std::map

This commit is contained in:
Siwat Sirichai 2023-12-31 13:29:11 +07:00
parent c635427d64
commit 5f6e586945
11 changed files with 143 additions and 178 deletions

View file

@ -5,6 +5,7 @@ AnalogIoT::AnalogIoT() : adc_conversion_callbacks() {
adc_publish_enabled[i] = false;
adc_conversion_interval[i] = 1000;
}
this->adc_conversion_callback_index = 0;
}
AnalogIoT::~AnalogIoT() {
@ -49,8 +50,8 @@ void AnalogIoT::publishADC(uint8_t pin) {
delete[] topic;
delete[] payload;
// Call all callbacks
for (int i = 0; i < this->adc_conversion_callbacks.size(); i++) {
this->adc_conversion_callbacks[i](pin, value);
for (auto& callback : this->adc_conversion_callbacks) {
callback.second(pin, value);
}
}
}
@ -65,16 +66,11 @@ void AnalogIoT::setADCsPublishEnabled(bool enabled) {
}
}
void AnalogIoT::registerADCConversionCallback(std::function<void(uint8_t, uint16_t)> callback) {
this->adc_conversion_callbacks.push_back(callback);
this->adc_conversion_callbacks[this->adc_conversion_callback_index++] = callback;
}
void AnalogIoT::deregisterADCConversionCallback(uint8_t handler) {
this->adc_conversion_callbacks.erase(handler);
}
// void AnalogIoT::deregisterADCConversionCallback(std::function<void(uint8_t, uint16_t)> callback) {
// for (int i = 0; i < this->adc_conversion_callbacks.size(); i++) {
// if (this->adc_conversion_callbacks[i].target<void(uint8_t, uint16_t)>() == callback.target<void(uint8_t, uint16_t)>()) {
// this->adc_conversion_callbacks.erase(this->adc_conversion_callbacks.begin() + i);
// break;
// }
// }
// }
void AnalogIoT::setADCConversionInterval(uint8_t pin, uint16_t interval) {
adc_conversion_interval[pin] = interval;
}