This is a fork of the `events` subdirectory of https://github.com/ARMmbed/mbed-os
Dependents: HelloWorld_CCA01M1 HelloWorld_CCA02M1 CI-data-logger-server HelloWorld_CCA02M1 ... more
This is a fork of the events subdirectory of https://github.com/ARMmbed/mbed-os.
Note, you must import this library with import name: events!!!
Revision 7:80510299c57c, committed 2016-10-12
- Comitter:
- Christopher Haster
- Date:
- Wed Oct 12 17:48:54 2016 -0500
- Parent:
- 6:29dc481c8037
- Child:
- 8:773de146a61c
- Child:
- 9:a372bff82709
- Commit message:
- callback - Fixed missing workaround for IAR issue with type information
Related to commit abba0c2
Changed in this revision
| Event.h | Show annotated file Show diff for this revision Revisions of this file |
| EventQueue.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/Event.h Thu Oct 06 15:57:08 2016 -0500
+++ b/Event.h Wed Oct 12 17:48:54 2016 -0500
@@ -212,8 +212,8 @@
new (p) C(*(F*)(e + 1));
equeue_event_delay(p, e->delay);
equeue_event_period(p, e->period);
- equeue_event_dtor(p, &Event::function_dtor<C>);
- return equeue_post(e->equeue, &Event::function_call<C>, p);
+ equeue_event_dtor(p, &EventQueue::function_dtor<C>);
+ return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
}
template <typename F>
@@ -221,17 +221,6 @@
((F*)(e + 1))->~F();
}
- // Function attributes
- template <typename F>
- static void function_call(void *p) {
- (*(F*)p)();
- }
-
- template <typename F>
- static void function_dtor(void *p) {
- ((F*)p)->~F();
- }
-
public:
/** Create an event
* @see Event::Event
@@ -616,8 +605,8 @@
new (p) C(*(F*)(e + 1), a0);
equeue_event_delay(p, e->delay);
equeue_event_period(p, e->period);
- equeue_event_dtor(p, &Event::function_dtor<C>);
- return equeue_post(e->equeue, &Event::function_call<C>, p);
+ equeue_event_dtor(p, &EventQueue::function_dtor<C>);
+ return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
}
template <typename F>
@@ -625,17 +614,6 @@
((F*)(e + 1))->~F();
}
- // Function attributes
- template <typename F>
- static void function_call(void *p) {
- (*(F*)p)();
- }
-
- template <typename F>
- static void function_dtor(void *p) {
- ((F*)p)->~F();
- }
-
public:
/** Create an event
* @see Event::Event
@@ -1020,8 +998,8 @@
new (p) C(*(F*)(e + 1), a0, a1);
equeue_event_delay(p, e->delay);
equeue_event_period(p, e->period);
- equeue_event_dtor(p, &Event::function_dtor<C>);
- return equeue_post(e->equeue, &Event::function_call<C>, p);
+ equeue_event_dtor(p, &EventQueue::function_dtor<C>);
+ return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
}
template <typename F>
@@ -1029,17 +1007,6 @@
((F*)(e + 1))->~F();
}
- // Function attributes
- template <typename F>
- static void function_call(void *p) {
- (*(F*)p)();
- }
-
- template <typename F>
- static void function_dtor(void *p) {
- ((F*)p)->~F();
- }
-
public:
/** Create an event
* @see Event::Event
@@ -1424,8 +1391,8 @@
new (p) C(*(F*)(e + 1), a0, a1, a2);
equeue_event_delay(p, e->delay);
equeue_event_period(p, e->period);
- equeue_event_dtor(p, &Event::function_dtor<C>);
- return equeue_post(e->equeue, &Event::function_call<C>, p);
+ equeue_event_dtor(p, &EventQueue::function_dtor<C>);
+ return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
}
template <typename F>
@@ -1433,17 +1400,6 @@
((F*)(e + 1))->~F();
}
- // Function attributes
- template <typename F>
- static void function_call(void *p) {
- (*(F*)p)();
- }
-
- template <typename F>
- static void function_dtor(void *p) {
- ((F*)p)->~F();
- }
-
public:
/** Create an event
* @see Event::Event
@@ -1828,8 +1784,8 @@
new (p) C(*(F*)(e + 1), a0, a1, a2, a3);
equeue_event_delay(p, e->delay);
equeue_event_period(p, e->period);
- equeue_event_dtor(p, &Event::function_dtor<C>);
- return equeue_post(e->equeue, &Event::function_call<C>, p);
+ equeue_event_dtor(p, &EventQueue::function_dtor<C>);
+ return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
}
template <typename F>
@@ -1837,17 +1793,6 @@
((F*)(e + 1))->~F();
}
- // Function attributes
- template <typename F>
- static void function_call(void *p) {
- (*(F*)p)();
- }
-
- template <typename F>
- static void function_dtor(void *p) {
- ((F*)p)->~F();
- }
-
public:
/** Create an event
* @see Event::Event
@@ -2232,8 +2177,8 @@
new (p) C(*(F*)(e + 1), a0, a1, a2, a3, a4);
equeue_event_delay(p, e->delay);
equeue_event_period(p, e->period);
- equeue_event_dtor(p, &Event::function_dtor<C>);
- return equeue_post(e->equeue, &Event::function_call<C>, p);
+ equeue_event_dtor(p, &EventQueue::function_dtor<C>);
+ return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
}
template <typename F>
@@ -2241,17 +2186,6 @@
((F*)(e + 1))->~F();
}
- // Function attributes
- template <typename F>
- static void function_call(void *p) {
- (*(F*)p)();
- }
-
- template <typename F>
- static void function_dtor(void *p) {
- ((F*)p)->~F();
- }
-
public:
/** Create an event
* @see Event::Event
--- a/EventQueue.h Thu Oct 06 15:57:08 2016 -0500
+++ b/EventQueue.h Wed Oct 12 17:48:54 2016 -0500
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#ifndef EVENT_QUEUE_H
#define EVENT_QUEUE_H
@@ -173,19 +174,14 @@
*/
template <typename F>
int call(F f) {
- struct local {
- static void call(void *p) { (*static_cast<F*>(p))(); }
- static void dtor(void *p) { static_cast<F*>(p)->~F(); }
- };
-
void *p = equeue_alloc(&_equeue, sizeof(F));
if (!p) {
return 0;
}
F *e = new (p) F(f);
- equeue_event_dtor(e, &local::dtor);
- return equeue_post(&_equeue, &local::call, e);
+ equeue_event_dtor(e, &EventQueue::function_dtor<F>);
+ return equeue_post(&_equeue, &EventQueue::function_call<F>, e);
}
/** Calls an event on the queue
@@ -437,11 +433,6 @@
*/
template <typename F>
int call_in(int ms, F f) {
- struct local {
- static void call(void *p) { (*static_cast<F*>(p))(); }
- static void dtor(void *p) { static_cast<F*>(p)->~F(); }
- };
-
void *p = equeue_alloc(&_equeue, sizeof(F));
if (!p) {
return 0;
@@ -449,8 +440,8 @@
F *e = new (p) F(f);
equeue_event_delay(e, ms);
- equeue_event_dtor(e, &local::dtor);
- return equeue_post(&_equeue, &local::call, e);
+ equeue_event_dtor(e, &EventQueue::function_dtor<F>);
+ return equeue_post(&_equeue, &EventQueue::function_call<F>, e);
}
/** Calls an event on the queue after a specified delay
@@ -702,11 +693,6 @@
*/
template <typename F>
int call_every(int ms, F f) {
- struct local {
- static void call(void *p) { (*static_cast<F*>(p))(); }
- static void dtor(void *p) { static_cast<F*>(p)->~F(); }
- };
-
void *p = equeue_alloc(&_equeue, sizeof(F));
if (!p) {
return 0;
@@ -715,8 +701,8 @@
F *e = new (p) F(f);
equeue_event_delay(e, ms);
equeue_event_period(e, ms);
- equeue_event_dtor(e, &local::dtor);
- return equeue_post(&_equeue, &local::call, e);
+ equeue_event_dtor(e, &EventQueue::function_dtor<F>);
+ return equeue_post(&_equeue, &EventQueue::function_call<F>, e);
}
/** Calls an event on the queue periodically
@@ -2044,6 +2030,18 @@
struct equeue _equeue;
mbed::Callback<void(int)> _update;
+ // Function attributes
+ template <typename F>
+ static void function_call(void *p) {
+ (*(F*)p)();
+ }
+
+ template <typename F>
+ static void function_dtor(void *p) {
+ ((F*)p)->~F();
+ }
+
+ // Context structures
template <typename F>
struct context00 {
F f;