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!!!

Files at this revision

API Documentation at this revision

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;