event: Remove EventType enum and pass a callback to event_push

This approach is more flexible because we don't need to support a fixed set of
"event types", any module can push events to be handled in main loop by simply
passing a callback to the Event structure.
This commit is contained in:
Thiago de Arruda
2014-10-20 08:44:46 -03:00
parent cf6f60ce4d
commit 77cc078c41
5 changed files with 9 additions and 25 deletions

View File

@@ -170,19 +170,7 @@ static size_t process_from(klist_t(Event) *queue)
Event event; Event event;
while (kl_shift(Event, queue, &event) == 0) { while (kl_shift(Event, queue, &event) == 0) {
switch (event.type) { event.handler(event);
case kEventSignal:
signal_handle(event);
break;
case kEventRStreamData:
rstream_read_event(event);
break;
case kEventJobExit:
job_exit_event(event);
break;
default:
abort();
}
count++; count++;
} }

View File

@@ -7,16 +7,12 @@
#include "nvim/os/rstream_defs.h" #include "nvim/os/rstream_defs.h"
typedef void * EventSource; typedef void * EventSource;
typedef struct event Event;
typedef void (*event_handler)(Event event);
typedef enum { struct event {
kEventSignal,
kEventRStreamData,
kEventJobExit
} EventType;
typedef struct {
EventSource source; EventSource source;
EventType type; event_handler handler;
union { union {
int signum; int signum;
struct { struct {
@@ -25,6 +21,6 @@ typedef struct {
} rstream; } rstream;
Job *job; Job *job;
} data; } data;
} Event; };
#endif // NVIM_OS_EVENT_DEFS_H #endif // NVIM_OS_EVENT_DEFS_H

View File

@@ -489,7 +489,7 @@ static void emit_exit_event(Job *job)
{ {
Event event = { Event event = {
.source = job_event_source(job), .source = job_event_source(job),
.type = kEventJobExit, .handler = job_exit_event,
.data.job = job .data.job = job
}; };
event_push(event); event_push(event);

View File

@@ -430,7 +430,7 @@ static void emit_read_event(RStream *rstream, bool eof)
{ {
Event event = { Event event = {
.source = rstream_event_source(rstream), .source = rstream_event_source(rstream),
.type = kEventRStreamData, .handler = rstream_read_event,
.data.rstream = { .data.rstream = {
.ptr = rstream, .ptr = rstream,
.eof = eof .eof = eof

View File

@@ -164,7 +164,7 @@ static void signal_cb(uv_signal_t *handle, int signum)
Event event = { Event event = {
.source = signal_event_source(), .source = signal_event_source(),
.type = kEventSignal, .handler = signal_handle,
.data = { .data = {
.signum = signum .signum = signum
} }