Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: microbit-dal microbit-dal microbit-ble-open microbit-dal ... more
Fork of BLE_API by
Diff: ble/CallChainOfFunctionPointersWithContext.h
- Revision:
- 932:68a113707ba5
- Parent:
- 928:624793511b25
- Child:
- 933:3ec277a0d780
--- a/ble/CallChainOfFunctionPointersWithContext.h Thu Nov 26 12:52:05 2015 +0000
+++ b/ble/CallChainOfFunctionPointersWithContext.h Thu Nov 26 12:52:05 2015 +0000
@@ -118,9 +118,15 @@
while (current) {
if(*current == toDetach) {
- if(previous == NULL) {
+ if(previous == NULL) {
+ if(currentCalled == current) {
+ currentCalled = NULL;
+ }
chainHead = current->getNext();
} else {
+ if(currentCalled == current) {
+ currentCalled = previous;
+ }
previous->chainAsNext(current->getNext());
}
delete current;
@@ -155,17 +161,23 @@
* chained FunctionPointers.
*/
void call(ContextType context) {
- if (chainHead) {
- chainHead->call(context);
- }
+ ((const CallChainOfFunctionPointersWithContext*) this)->call(context);
}
/**
* @brief same as above but const
*/
void call(ContextType context) const {
- if (chainHead) {
- chainHead->call(context);
+ currentCalled = chainHead;
+
+ while(currentCalled) {
+ currentCalled->call(context);
+ // if this was the head and the call removed the head
+ if(currentCalled == NULL) {
+ currentCalled = chainHead;
+ } else {
+ currentCalled = currentCalled->getNext();
+ }
}
}
@@ -197,6 +209,8 @@
private:
pFunctionPointerWithContext_t chainHead;
+ mutable pFunctionPointerWithContext_t currentCalled;
+
/* Disallow copy constructor and assignment operators. */
private:
