Skip to content

Commit 34172ef

Browse files
UserAllocatedEvent implementation
UserAllocatedEvent provides mechanism for event posting and dispatching without utilization of queue internal memory. UserAllocatedEvent embeds all underlying event data and doesn't require any memory allocation while posting and dispatching. All of these makes it cannot fail due to memory exhaustion while posting.
1 parent 023f630 commit 34172ef

File tree

3 files changed

+446
-6
lines changed

3 files changed

+446
-6
lines changed

events/EventQueue.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ namespace events {
4545
// Predeclared classes
4646
template <typename F>
4747
class Event;
48+
template <typename F, typename A>
49+
class UserAllocatedEvent;
4850

4951
/**
5052
* \defgroup events_EventQueue EventQueue class
@@ -1071,6 +1073,8 @@ class EventQueue : private mbed::NonCopyable<EventQueue> {
10711073
#if !defined(DOXYGEN_ONLY)
10721074
template <typename F>
10731075
friend class Event;
1076+
template <typename F, typename A>
1077+
friend class UserAllocatedEvent;
10741078
struct equeue _equeue;
10751079
mbed::Callback<void(int)> _update;
10761080

@@ -1095,7 +1099,7 @@ class EventQueue : private mbed::NonCopyable<EventQueue> {
10951099
struct context<F> {
10961100
F f;
10971101

1098-
context(F f)
1102+
constexpr context(F f)
10991103
: f(f) {}
11001104

11011105
template <typename... ArgTs>
@@ -1110,7 +1114,7 @@ class EventQueue : private mbed::NonCopyable<EventQueue> {
11101114
F f;
11111115
C0 c0;
11121116

1113-
context(F f, C0 c0)
1117+
constexpr context(F f, C0 c0)
11141118
: f(f), c0(c0) {}
11151119

11161120
template <typename... ArgTs>
@@ -1126,7 +1130,7 @@ class EventQueue : private mbed::NonCopyable<EventQueue> {
11261130
C0 c0;
11271131
C1 c1;
11281132

1129-
context(F f, C0 c0, C1 c1)
1133+
constexpr context(F f, C0 c0, C1 c1)
11301134
: f(f), c0(c0), c1(c1) {}
11311135

11321136
template <typename... ArgTs>
@@ -1143,7 +1147,7 @@ class EventQueue : private mbed::NonCopyable<EventQueue> {
11431147
C1 c1;
11441148
C2 c2;
11451149

1146-
context(F f, C0 c0, C1 c1, C2 c2)
1150+
constexpr context(F f, C0 c0, C1 c1, C2 c2)
11471151
: f(f), c0(c0), c1(c1), c2(c2) {}
11481152

11491153
template <typename... ArgTs>
@@ -1161,7 +1165,7 @@ class EventQueue : private mbed::NonCopyable<EventQueue> {
11611165
C2 c2;
11621166
C3 c3;
11631167

1164-
context(F f, C0 c0, C1 c1, C2 c2, C3 c3)
1168+
constexpr context(F f, C0 c0, C1 c1, C2 c2, C3 c3)
11651169
: f(f), c0(c0), c1(c1), c2(c2), c3(c3) {}
11661170

11671171
template <typename... ArgTs>
@@ -1180,7 +1184,7 @@ class EventQueue : private mbed::NonCopyable<EventQueue> {
11801184
C3 c3;
11811185
C4 c4;
11821186

1183-
context(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4)
1187+
constexpr context(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4)
11841188
: f(f), c0(c0), c1(c1), c2(c2), c3(c3), c4(c4) {}
11851189

11861190
template <typename... ArgTs>

0 commit comments

Comments
 (0)