/* * Copyright (C) 2018 Vito Caputo - * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3 as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef _PULP_H #define _PULP_H #include typedef struct pulp_fiber_t pulp_fiber_t; typedef struct pulp_t pulp_t; typedef uint64_t pulp_usec_t; typedef struct thunk_t thunk_t; /* for conveniences like trivial stack allocation, this is public */ typedef struct pulp_mailbox_t { unsigned size, count; void *slots[]; } pulp_mailbox_t; pulp_t * pulp_new(void); void pulp_free(pulp_t *pulp); int pulp_tick(pulp_t *pulp, unsigned *next_tick_delay_us); void pulp_run(pulp_t *pulp); void pulp_exit(pulp_t *pulp); pulp_fiber_t * pulp_fiber_new(pulp_t *pulp, unsigned delay_ms, thunk_t *thunk); void pulp_msleep(pulp_t *pulp, unsigned milliseconds, pulp_mailbox_t *mailbox); void pulp_sleep(pulp_t *pulp, unsigned seconds, pulp_mailbox_t *mailbox); pulp_usec_t pulp_now(pulp_t *pulp); pulp_fiber_t * pulp_self(pulp_t *pulp); int pulp_fiber_get_mailslot(pulp_t *pulp, pulp_fiber_t *fiber, void ***res_mailslot); #endif