Skip to content
This repository was archived by the owner on Aug 19, 2021. It is now read-only.

Commit 5e99b0f

Browse files
committed
Adopted functional template style in Event
Before: Event<A, B, C> After: Event<void(A, B, C)>
1 parent f66a5f3 commit 5e99b0f

File tree

4 files changed

+48
-49
lines changed

4 files changed

+48
-49
lines changed

Event.h

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ namespace events {
2525
*
2626
* Representation of an event for fine-grain dispatch control
2727
*/
28-
template <typename A0=void, typename A1=void, typename A2=void, typename A3=void, typename A4=void>
28+
template <typename F>
2929
class Event;
3030

3131
/** Event
3232
*
3333
* Representation of an event for fine-grain dispatch control
3434
*/
3535
template <>
36-
class Event<> {
36+
class Event<void()> {
3737
public:
3838
/** Event lifetime
3939
*
@@ -226,14 +226,15 @@ class Event<> {
226226
* Representation of an event for fine-grain dispatch control
227227
*/
228228
template <typename A0>
229-
class Event<A0> {
229+
class Event<void(A0)> {
230230
public:
231231
/** Event lifetime
232232
*
233233
* Constructs an event bound to the specified event queue. The specified
234234
* callback acts as the target for the event and is executed in the
235235
* context of the event queue's dispatch loop once posted.
236236
*
237+
* @param q Event queue to dispatch on
237238
* @param f Function to execute when the event is dispatched
238239
* @param a0..a4 Arguments to pass to the callback
239240
*/
@@ -418,14 +419,15 @@ class Event<A0> {
418419
* Representation of an event for fine-grain dispatch control
419420
*/
420421
template <typename A0, typename A1>
421-
class Event<A0, A1> {
422+
class Event<void(A0, A1)> {
422423
public:
423424
/** Event lifetime
424425
*
425426
* Constructs an event bound to the specified event queue. The specified
426427
* callback acts as the target for the event and is executed in the
427428
* context of the event queue's dispatch loop once posted.
428429
*
430+
* @param q Event queue to dispatch on
429431
* @param f Function to execute when the event is dispatched
430432
* @param a0..a4 Arguments to pass to the callback
431433
*/
@@ -610,14 +612,15 @@ class Event<A0, A1> {
610612
* Representation of an event for fine-grain dispatch control
611613
*/
612614
template <typename A0, typename A1, typename A2>
613-
class Event<A0, A1, A2> {
615+
class Event<void(A0, A1, A2)> {
614616
public:
615617
/** Event lifetime
616618
*
617619
* Constructs an event bound to the specified event queue. The specified
618620
* callback acts as the target for the event and is executed in the
619621
* context of the event queue's dispatch loop once posted.
620622
*
623+
* @param q Event queue to dispatch on
621624
* @param f Function to execute when the event is dispatched
622625
* @param a0..a4 Arguments to pass to the callback
623626
*/
@@ -802,14 +805,15 @@ class Event<A0, A1, A2> {
802805
* Representation of an event for fine-grain dispatch control
803806
*/
804807
template <typename A0, typename A1, typename A2, typename A3>
805-
class Event<A0, A1, A2, A3> {
808+
class Event<void(A0, A1, A2, A3)> {
806809
public:
807810
/** Event lifetime
808811
*
809812
* Constructs an event bound to the specified event queue. The specified
810813
* callback acts as the target for the event and is executed in the
811814
* context of the event queue's dispatch loop once posted.
812815
*
816+
* @param q Event queue to dispatch on
813817
* @param f Function to execute when the event is dispatched
814818
* @param a0..a4 Arguments to pass to the callback
815819
*/
@@ -994,14 +998,15 @@ class Event<A0, A1, A2, A3> {
994998
* Representation of an event for fine-grain dispatch control
995999
*/
9961000
template <typename A0, typename A1, typename A2, typename A3, typename A4>
997-
class Event {
1001+
class Event<void(A0, A1, A2, A3, A4)> {
9981002
public:
9991003
/** Event lifetime
10001004
*
10011005
* Constructs an event bound to the specified event queue. The specified
10021006
* callback acts as the target for the event and is executed in the
10031007
* context of the event queue's dispatch loop once posted.
10041008
*
1009+
* @param q Event queue to dispatch on
10051010
* @param f Function to execute when the event is dispatched
10061011
* @param a0..a4 Arguments to pass to the callback
10071012
*/
@@ -1183,35 +1188,35 @@ class Event {
11831188

11841189

11851190
template <typename F>
1186-
Event<> EventQueue::event(F f) {
1187-
return Event<>(this, f);
1191+
Event<void()> EventQueue::event(F f) {
1192+
return Event<void()>(this, f);
11881193
}
11891194

11901195
template <typename F, typename A0>
1191-
Event<> EventQueue::event(F f, A0 a0) {
1192-
return Event<>(this, f, a0);
1196+
Event<void()> EventQueue::event(F f, A0 a0) {
1197+
return Event<void()>(this, f, a0);
11931198
}
11941199

11951200
template <typename F, typename A0, typename A1>
1196-
Event<> EventQueue::event(F f, A0 a0, A1 a1) {
1197-
return Event<>(this, f, a0, a1);
1201+
Event<void()> EventQueue::event(F f, A0 a0, A1 a1) {
1202+
return Event<void()>(this, f, a0, a1);
11981203
}
11991204

12001205
template <typename F, typename A0, typename A1, typename A2>
1201-
Event<> EventQueue::event(F f, A0 a0, A1 a1, A2 a2) {
1202-
return Event<>(this, f, a0, a1, a2);
1206+
Event<void()> EventQueue::event(F f, A0 a0, A1 a1, A2 a2) {
1207+
return Event<void()>(this, f, a0, a1, a2);
12031208
}
12041209

12051210
template <typename F, typename A0, typename A1, typename A2, typename A3>
1206-
Event<> EventQueue::event(F f, A0 a0, A1 a1, A2 a2, A3 a3) {
1207-
return Event<>(this, f, a0, a1, a2, a3);
1211+
Event<void()> EventQueue::event(F f, A0 a0, A1 a1, A2 a2, A3 a3) {
1212+
return Event<void()>(this, f, a0, a1, a2, a3);
12081213
}
12091214

12101215
template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4>
1211-
Event<> EventQueue::event(F f, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) {
1212-
return Event<>(this, f, a0, a1, a2, a3, a4);
1216+
Event<void()> EventQueue::event(F f, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) {
1217+
return Event<void()>(this, f, a0, a1, a2, a3, a4);
12131218
}
12141219

12151220
}
12161221

1217-
#endif
1222+
#endif

EventQueue.h

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ namespace events {
3737
#define EVENTS_QUEUE_SIZE (32*EVENTS_EVENT_SIZE)
3838

3939
// Predeclared classes
40-
template <typename A0, typename A1, typename A2, typename A3, typename A4>
40+
template <typename F>
4141
class Event;
4242

4343

@@ -329,31 +329,25 @@ class EventQueue {
329329
* @return Event that will dispatch on the specific queue
330330
*/
331331
template <typename F>
332-
Event<void, void, void, void, void>
333-
event(F f);
332+
Event<void()> event(F f);
334333

335334
template <typename F, typename A0>
336-
Event<void, void, void, void, void>
337-
event(F f, A0 a0);
335+
Event<void()> event(F f, A0 a0);
338336

339337
template <typename F, typename A0, typename A1>
340-
Event<void, void, void, void, void>
341-
event(F f, A0 a0, A1 a1);
338+
Event<void()> event(F f, A0 a0, A1 a1);
342339

343340
template <typename F, typename A0, typename A1, typename A2>
344-
Event<void, void, void, void, void>
345-
event(F f, A0 a0, A1 a1, A2 a2);
341+
Event<void()> event(F f, A0 a0, A1 a1, A2 a2);
346342

347343
template <typename F, typename A0, typename A1, typename A2, typename A3>
348-
Event<void, void, void, void, void>
349-
event(F f, A0 a0, A1 a1, A2 a2, A3 a3);
344+
Event<void()> event(F f, A0 a0, A1 a1, A2 a2, A3 a3);
350345

351346
template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4>
352-
Event<void, void, void, void, void>
353-
event(F f, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4);
347+
Event<void()> event(F f, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4);
354348

355349
protected:
356-
template <typename A0, typename A1, typename A2, typename A3, typename A4>
350+
template <typename F>
357351
friend class Event;
358352
struct equeue _equeue;
359353
mbed::Callback<void(int)> _update;
@@ -767,4 +761,4 @@ namespace events {
767761

768762
}
769763

770-
#endif
764+
#endif

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ expect a callback.
100100
``` cpp
101101
// Creates an event bound to the specified event queue
102102
EventQueue queue;
103-
Event<> event(&queue, doit);
103+
Event<void()> event(&queue, doit);
104104

105105
// The event can be manually configured for special timing requirements
106106
// specified in milliseconds
@@ -113,7 +113,7 @@ queue.dispatch();
113113

114114
// Events can also pass arguments to the underlying callback when both
115115
// initially constructed and posted.
116-
Event<int, int> event(&queue, printf, "recieved %d and %d\n");
116+
Event<void(int, int)> event(&queue, printf, "recieved %d and %d\n");
117117

118118
// Events can be posted multiple times and enqueue gracefully until
119119
// the dispatch function is called.

TESTS/events/queue/main.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,12 @@ void event_class_test() {
174174
counter = 0;
175175
EventQueue queue(2048);
176176

177-
Event<int, int, int, int, int> e5(&queue, count5);
178-
Event<int, int, int, int> e4(&queue, count5, 1);
179-
Event<int, int, int> e3(&queue, count5, 1, 1);
180-
Event<int, int> e2(&queue, count5, 1, 1, 1);
181-
Event<int> e1(&queue, count5, 1, 1, 1, 1);
182-
Event<> e0(&queue, count5, 1, 1, 1, 1, 1);
177+
Event<void(int, int, int, int, int)> e5(&queue, count5);
178+
Event<void(int, int, int, int)> e4(&queue, count5, 1);
179+
Event<void(int, int, int)> e3(&queue, count5, 1, 1);
180+
Event<void(int, int)> e2(&queue, count5, 1, 1, 1);
181+
Event<void(int)> e1(&queue, count5, 1, 1, 1, 1);
182+
Event<void()> e0(&queue, count5, 1, 1, 1, 1, 1);
183183

184184
e5.post(1, 1, 1, 1, 1);
185185
e4.post(1, 1, 1, 1);
@@ -197,12 +197,12 @@ void event_class_helper_test() {
197197
counter = 0;
198198
EventQueue queue(2048);
199199

200-
Event<> e5 = queue.event(count5, 1, 1, 1, 1, 1);
201-
Event<> e4 = queue.event(count4, 1, 1, 1, 1);
202-
Event<> e3 = queue.event(count3, 1, 1, 1);
203-
Event<> e2 = queue.event(count2, 1, 1);
204-
Event<> e1 = queue.event(count1, 1);
205-
Event<> e0 = queue.event(count0);
200+
Event<void()> e5 = queue.event(count5, 1, 1, 1, 1, 1);
201+
Event<void()> e4 = queue.event(count4, 1, 1, 1, 1);
202+
Event<void()> e3 = queue.event(count3, 1, 1, 1);
203+
Event<void()> e2 = queue.event(count2, 1, 1);
204+
Event<void()> e1 = queue.event(count1, 1);
205+
Event<void()> e0 = queue.event(count0);
206206

207207
e5.post();
208208
e4.post();

0 commit comments

Comments
 (0)