Blame src/n-acd/src/util/timer.h
|
Packit Service |
dff8e4 |
#pragma once
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
#include <c-rbtree.h>
|
|
Packit Service |
dff8e4 |
#include <c-stdaux.h>
|
|
Packit Service |
dff8e4 |
#include <inttypes.h>
|
|
Packit Service |
dff8e4 |
#include <stdlib.h>
|
|
Packit Service |
dff8e4 |
#include <time.h>
|
|
Packit Service |
dff8e4 |
#include <unistd.h>
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
typedef struct Timer Timer;
|
|
Packit Service |
dff8e4 |
typedef struct Timeout Timeout;
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
enum {
|
|
Packit Service |
dff8e4 |
_TIMER_E_SUCCESS,
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
TIMER_E_TRIGGERED,
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
_TIMER_E_N,
|
|
Packit Service |
dff8e4 |
};
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
struct Timer {
|
|
Packit Service |
dff8e4 |
int fd;
|
|
Packit Service |
dff8e4 |
clockid_t clock;
|
|
Packit Service |
dff8e4 |
CRBTree tree;
|
|
Packit Service |
dff8e4 |
uint64_t scheduled_timeout;
|
|
Packit Service |
dff8e4 |
};
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
#define TIMER_NULL(_x) { \
|
|
Packit Service |
dff8e4 |
.fd = -1, \
|
|
Packit Service |
dff8e4 |
.tree = C_RBTREE_INIT, \
|
|
Packit Service |
dff8e4 |
}
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
struct Timeout {
|
|
Packit Service |
dff8e4 |
Timer *timer;
|
|
Packit Service |
dff8e4 |
CRBNode node;
|
|
Packit Service |
dff8e4 |
uint64_t timeout;
|
|
Packit Service |
dff8e4 |
};
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
#define TIMEOUT_INIT(_x) { \
|
|
Packit Service |
dff8e4 |
.node = C_RBNODE_INIT((_x).node), \
|
|
Packit Service |
dff8e4 |
}
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
int timer_init(Timer *timer);
|
|
Packit Service |
dff8e4 |
void timer_deinit(Timer *timer);
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
void timer_now(Timer *timer, uint64_t *nowp);
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
int timer_pop_timeout(Timer *timer, uint64_t now, Timeout **timerp);
|
|
Packit Service |
dff8e4 |
void timer_rearm(Timer *timer);
|
|
Packit Service |
dff8e4 |
int timer_read(Timer *timer);
|
|
Packit Service |
dff8e4 |
|
|
Packit Service |
dff8e4 |
void timeout_schedule(Timeout *timeout, Timer *timer, uint64_t time);
|
|
Packit Service |
dff8e4 |
void timeout_unschedule(Timeout *timeout);
|
|
Packit Service |
dff8e4 |
|