Files
c-toxcore/toxcore/ev.c
T
iphydf 2f87ac67b0 feat: Add Event Loop abstraction (Ev).
- `Ev` interface in `toxcore/ev.h` and `toxcore/ev.c`.
- System-specific event loop backends (epoll, poll, win32) in
  `toxcore/os_event.c`.

Performance Benchmarks (epoll backend):

| Sockets (N) | Active (M) | Time (ns) | Time/Active (ns) |
|------------:|-----------:|----------:|-----------------:|
|           8 |          1 |       438 |              438 |
|          64 |          1 |       438 |              438 |
|         512 |          1 |       443 |              443 |
|        1024 |          1 |       442 |              442 |
|        1024 |         10 |       947 |               95 |
|        1024 |        100 |     6,268 |               63 |
|        1024 |       1024 |    61,875 |               60 |
2026-01-19 17:49:39 +00:00

48 lines
965 B
C

/* SPDX-License-Identifier: GPL-3.0-or-later
* Copyright © 2026 The TokTok team.
*/
#include "ev.h"
#include <assert.h>
#include "ccompat.h"
bool ev_add(Ev *ev, Socket sock, Ev_Events events, void *data)
{
assert(ev != nullptr);
return ev->funcs->add_callback(ev->user_data, sock, events, data);
}
bool ev_mod(Ev *ev, Socket sock, Ev_Events events, void *data)
{
assert(ev != nullptr);
return ev->funcs->mod_callback(ev->user_data, sock, events, data);
}
bool ev_del(Ev *ev, Socket sock)
{
assert(ev != nullptr);
return ev->funcs->del_callback(ev->user_data, sock);
}
int32_t ev_run(Ev *ev, Ev_Result *results, uint32_t max_results, int32_t timeout_ms)
{
assert(ev != nullptr);
if (max_results == 0) {
return 0;
}
return ev->funcs->run_callback(ev->user_data, results, max_results, timeout_ms);
}
void ev_kill(Ev *ev)
{
if (ev == nullptr) {
return;
}
ev->funcs->kill_callback(ev);
}