mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Thu Sep 06 13:40:20 2018 +0100
Revision:
187:0387e8f68319
Parent:
180:96ed750bd169
Child:
189:f392fc9709a3
mbed-dev library. Release version 163

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 180:96ed750bd169 1
Anna Bridge 180:96ed750bd169 2 // Suppress deprecation warnings since this whole
Anna Bridge 180:96ed750bd169 3 // class is deprecated already
Anna Bridge 180:96ed750bd169 4 #include "mbed_toolchain.h"
Anna Bridge 180:96ed750bd169 5 #undef MBED_DEPRECATED_SINCE
Anna Bridge 180:96ed750bd169 6 #define MBED_DEPRECATED_SINCE(...)
Anna Bridge 180:96ed750bd169 7
<> 149:156823d33999 8 #include "platform/CallChain.h"
<> 149:156823d33999 9 #include "cmsis.h"
<> 160:d5399cc887bb 10 #include "platform/mbed_critical.h"
<> 149:156823d33999 11
<> 149:156823d33999 12 namespace mbed {
<> 149:156823d33999 13
<> 149:156823d33999 14 class CallChainLink {
<> 149:156823d33999 15 public:
AnnaBridge 187:0387e8f68319 16 CallChainLink(): cb(), next(NULL)
AnnaBridge 187:0387e8f68319 17 {
<> 149:156823d33999 18 // No work to do
<> 149:156823d33999 19 }
<> 149:156823d33999 20
AnnaBridge 187:0387e8f68319 21 CallChainLink(Callback<void()> &callback): cb(callback), next(NULL)
AnnaBridge 187:0387e8f68319 22 {
<> 149:156823d33999 23 // No work to do
<> 149:156823d33999 24 }
<> 149:156823d33999 25 Callback<void()> cb;
AnnaBridge 187:0387e8f68319 26 CallChainLink *next;
<> 149:156823d33999 27 };
<> 149:156823d33999 28
AnnaBridge 187:0387e8f68319 29 CallChain::CallChain(int size) : _chain(NULL)
AnnaBridge 187:0387e8f68319 30 {
<> 149:156823d33999 31 // No work to do
<> 149:156823d33999 32 }
<> 149:156823d33999 33
AnnaBridge 187:0387e8f68319 34 CallChain::~CallChain()
AnnaBridge 187:0387e8f68319 35 {
<> 149:156823d33999 36 clear();
<> 149:156823d33999 37 }
<> 149:156823d33999 38
AnnaBridge 187:0387e8f68319 39 pFunctionPointer_t CallChain::add(Callback<void()> func)
AnnaBridge 187:0387e8f68319 40 {
<> 149:156823d33999 41 CallChainLink *new_link = new CallChainLink(func);
<> 149:156823d33999 42 if (NULL == _chain) {
<> 149:156823d33999 43 _chain = new_link;
<> 149:156823d33999 44 return &new_link->cb;
<> 149:156823d33999 45 }
<> 149:156823d33999 46
<> 149:156823d33999 47 CallChainLink *link = _chain;
<> 149:156823d33999 48 while (true) {
<> 149:156823d33999 49 if (NULL == link->next) {
<> 149:156823d33999 50 link->next = new_link;
<> 149:156823d33999 51 return &new_link->cb;
<> 149:156823d33999 52 }
<> 149:156823d33999 53 link = link->next;
<> 149:156823d33999 54 }
<> 149:156823d33999 55 }
<> 149:156823d33999 56
AnnaBridge 187:0387e8f68319 57 pFunctionPointer_t CallChain::add_front(Callback<void()> func)
AnnaBridge 187:0387e8f68319 58 {
<> 149:156823d33999 59 CallChainLink *link = new CallChainLink(func);
<> 149:156823d33999 60 link->next = _chain;
<> 149:156823d33999 61 _chain = link;
<> 149:156823d33999 62 return &link->cb;
<> 149:156823d33999 63 }
<> 149:156823d33999 64
AnnaBridge 187:0387e8f68319 65 int CallChain::size() const
AnnaBridge 187:0387e8f68319 66 {
<> 149:156823d33999 67 CallChainLink *link = _chain;
<> 149:156823d33999 68 int elements = 0;
<> 149:156823d33999 69 while (link != NULL) {
<> 149:156823d33999 70 elements++;
<> 149:156823d33999 71 link = link->next;
<> 149:156823d33999 72 }
<> 149:156823d33999 73 return elements;
<> 149:156823d33999 74 }
<> 149:156823d33999 75
AnnaBridge 187:0387e8f68319 76 pFunctionPointer_t CallChain::get(int idx) const
AnnaBridge 187:0387e8f68319 77 {
<> 149:156823d33999 78 CallChainLink *link = _chain;
<> 149:156823d33999 79 for (int i = 0; i < idx; i++) {
<> 149:156823d33999 80 if (NULL == link) {
<> 149:156823d33999 81 break;
<> 149:156823d33999 82 }
<> 149:156823d33999 83 link = link->next;
<> 149:156823d33999 84 }
<> 149:156823d33999 85 return &link->cb;
<> 149:156823d33999 86 }
<> 149:156823d33999 87
AnnaBridge 187:0387e8f68319 88 int CallChain::find(pFunctionPointer_t f) const
AnnaBridge 187:0387e8f68319 89 {
<> 149:156823d33999 90 CallChainLink *link = _chain;
<> 149:156823d33999 91 int i = 0;
<> 149:156823d33999 92 while (link != NULL) {
<> 149:156823d33999 93 if (f == &link->cb) {
<> 149:156823d33999 94 return i;
<> 149:156823d33999 95 }
<> 149:156823d33999 96 i++;
<> 149:156823d33999 97 link = link->next;
<> 149:156823d33999 98 }
<> 149:156823d33999 99 return -1;
<> 149:156823d33999 100 }
<> 149:156823d33999 101
AnnaBridge 187:0387e8f68319 102 void CallChain::clear()
AnnaBridge 187:0387e8f68319 103 {
<> 149:156823d33999 104 CallChainLink *link = _chain;
<> 149:156823d33999 105 _chain = NULL;
<> 149:156823d33999 106 while (link != NULL) {
<> 149:156823d33999 107 CallChainLink *temp = link->next;
<> 149:156823d33999 108 delete link;
<> 149:156823d33999 109 link = temp;
<> 149:156823d33999 110 }
<> 149:156823d33999 111 }
<> 149:156823d33999 112
AnnaBridge 187:0387e8f68319 113 bool CallChain::remove(pFunctionPointer_t f)
AnnaBridge 187:0387e8f68319 114 {
<> 149:156823d33999 115 CallChainLink *link = _chain;
<> 149:156823d33999 116 while (link != NULL) {
<> 149:156823d33999 117 if (f == &link->cb) {
<> 149:156823d33999 118 delete link;
<> 149:156823d33999 119 return true;
<> 149:156823d33999 120 }
<> 149:156823d33999 121 link = link->next;
<> 149:156823d33999 122 }
<> 149:156823d33999 123 return false;
<> 149:156823d33999 124 }
<> 149:156823d33999 125
AnnaBridge 187:0387e8f68319 126 void CallChain::call()
AnnaBridge 187:0387e8f68319 127 {
<> 149:156823d33999 128 CallChainLink *link = _chain;
<> 149:156823d33999 129 while (link != NULL) {
<> 149:156823d33999 130 link->cb.call();
<> 149:156823d33999 131 link = link->next;
<> 149:156823d33999 132 }
<> 149:156823d33999 133 }
<> 149:156823d33999 134
<> 149:156823d33999 135 } // namespace mbed