1 | /* |
1 | /* |
2 | * libev native API header |
2 | * libev native API header |
3 | * |
3 | * |
4 | * Copyright (c) 2007-2019 Marc Alexander Lehmann <libev@schmorp.de> |
4 | * Copyright (c) 2007-2020 Marc Alexander Lehmann <libev@schmorp.de> |
5 | * All rights reserved. |
5 | * All rights reserved. |
6 | * |
6 | * |
7 | * Redistribution and use in source and binary forms, with or without modifica- |
7 | * Redistribution and use in source and binary forms, with or without modifica- |
8 | * tion, are permitted provided that the following conditions are met: |
8 | * tion, are permitted provided that the following conditions are met: |
9 | * |
9 | * |
… | |
… | |
213 | #endif |
213 | #endif |
214 | |
214 | |
215 | /*****************************************************************************/ |
215 | /*****************************************************************************/ |
216 | |
216 | |
217 | #define EV_VERSION_MAJOR 4 |
217 | #define EV_VERSION_MAJOR 4 |
218 | #define EV_VERSION_MINOR 31 |
218 | #define EV_VERSION_MINOR 32 |
219 | |
219 | |
220 | /* eventmask, revents, events... */ |
220 | /* eventmask, revents, events... */ |
221 | enum { |
221 | enum { |
222 | EV_UNDEF = (int)0xFFFFFFFF, /* guaranteed to be invalid */ |
222 | EV_UNDEF = (int)0xFFFFFFFF, /* guaranteed to be invalid */ |
223 | EV_NONE = 0x00, /* no events */ |
223 | EV_NONE = 0x00, /* no events */ |
… | |
… | |
692 | ((ev_watcher *)(void *)(ev))->pending = 0; \ |
692 | ((ev_watcher *)(void *)(ev))->pending = 0; \ |
693 | ev_set_priority ((ev), 0); \ |
693 | ev_set_priority ((ev), 0); \ |
694 | ev_set_cb ((ev), cb_); \ |
694 | ev_set_cb ((ev), cb_); \ |
695 | } while (0) |
695 | } while (0) |
696 | |
696 | |
|
|
697 | #define ev_io_modify(ev,events_) do { (ev)->events = (ev)->events & EV__IOFDSET | (events_); } while (0) |
697 | #define ev_io_set(ev,fd_,events_) do { (ev)->fd = (fd_); (ev)->events = (events_) | EV__IOFDSET; } while (0) |
698 | #define ev_io_set(ev,fd_,events_) do { (ev)->fd = (fd_); (ev)->events = (events_) | EV__IOFDSET; } while (0) |
698 | #define ev_timer_set(ev,after_,repeat_) do { ((ev_watcher_time *)(ev))->at = (after_); (ev)->repeat = (repeat_); } while (0) |
699 | #define ev_timer_set(ev,after_,repeat_) do { ((ev_watcher_time *)(ev))->at = (after_); (ev)->repeat = (repeat_); } while (0) |
699 | #define ev_periodic_set(ev,ofs_,ival_,rcb_) do { (ev)->offset = (ofs_); (ev)->interval = (ival_); (ev)->reschedule_cb = (rcb_); } while (0) |
700 | #define ev_periodic_set(ev,ofs_,ival_,rcb_) do { (ev)->offset = (ofs_); (ev)->interval = (ival_); (ev)->reschedule_cb = (rcb_); } while (0) |
700 | #define ev_signal_set(ev,signum_) do { (ev)->signum = (signum_); } while (0) |
701 | #define ev_signal_set(ev,signum_) do { (ev)->signum = (signum_); } while (0) |
701 | #define ev_child_set(ev,pid_,trace_) do { (ev)->pid = (pid_); (ev)->flags = !!(trace_); } while (0) |
702 | #define ev_child_set(ev,pid_,trace_) do { (ev)->pid = (pid_); (ev)->flags = !!(trace_); } while (0) |
… | |
… | |
737 | #endif |
738 | #endif |
738 | |
739 | |
739 | #define ev_periodic_at(ev) (+((ev_watcher_time *)(ev))->at) |
740 | #define ev_periodic_at(ev) (+((ev_watcher_time *)(ev))->at) |
740 | |
741 | |
741 | #ifndef ev_set_cb |
742 | #ifndef ev_set_cb |
|
|
743 | /* memmove is used here to avoid strict aliasing violations, and hopefully is optimized out by any reasonable compiler */ |
742 | # define ev_set_cb(ev,cb_) (ev_cb_ (ev) = (cb_), memmove (&((ev_watcher *)(ev))->cb, &ev_cb_ (ev), sizeof (ev_cb_ (ev)))) |
744 | # define ev_set_cb(ev,cb_) (ev_cb_ (ev) = (cb_), memmove (&((ev_watcher *)(ev))->cb, &ev_cb_ (ev), sizeof (ev_cb_ (ev)))) |
743 | #endif |
745 | #endif |
744 | |
746 | |
745 | /* stopping (enabling, adding) a watcher does nothing if it is already running */ |
747 | /* stopping (enabling, adding) a watcher does nothing if it is already running */ |
746 | /* stopping (disabling, deleting) a watcher does nothing unless it's already running */ |
748 | /* stopping (disabling, deleting) a watcher does nothing unless it's already running */ |