GFXprim
2D bitmap graphics library with emphasis on speed and correctness
Loading...
Searching...
No Matches
gp_timer.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2/*
3 * Copyright (C) 2009-2023 Cyril Hrubis <metan@ucw.cz>
4 */
5
11#ifndef UTILS_GP_TIMER_H
12#define UTILS_GP_TIMER_H
13
14#include <stdint.h>
15#include <utils/gp_types.h>
16#include <input/gp_types.h>
17
21#define GP_TIMER_STOP UINT32_MAX
22
26struct gp_timer {
27 union {
28 gp_heap_head heap;
29 gp_timer *next;
30 };
31
33 uint64_t expires;
34
36 const char *id;
37
39 uint32_t period;
40
42 uint32_t running:1;
44 uint32_t in_callback:1;
46 uint32_t res_in_callback:1;
47
48 /* Do not touch! */
49 void *_priv;
50
57 uint32_t (*callback)(struct gp_timer *self);
59 void *priv;
60};
61
62#define GP_TIMER_DECLARE(name, texpires, tperiod, tid, tcallback, tpriv) \
63 gp_timer name = { \
64 .expires = texpires, \
65 .period = tperiod, \
66 .id = tid, \
67 .callback = tcallback, \
68 .priv = tpriv \
69 }
78static inline int gp_timer_running(gp_timer *timer)
79{
80 return timer->running;
81}
82
89
106void gp_timer_queue_ins(gp_timer **queue, uint64_t now, gp_timer *timer);
107
120
131int gp_timer_queue_process(gp_timer **queue, uint64_t now);
132
139static inline unsigned int gp_timer_queue_size(gp_timer *queue)
140{
141 return queue ? queue->heap.children + 1 : 0;
142}
143
144#endif /* UTILS_GP_TIMER_H */
static unsigned int gp_timer_queue_size(gp_timer *queue)
Returns size of the queue, i.e. number of timers.
Definition gp_timer.h:139
void gp_timer_queue_dump(gp_timer *queue)
Prints the structrue of binary heap into stdout, only for debugging.
void gp_timer_queue_ins(gp_timer **queue, uint64_t now, gp_timer *timer)
Inserts timer into the timer priority queue.
void gp_timer_queue_rem(gp_timer **queue, gp_timer *timer)
Removes timer from timer queue.
static int gp_timer_running(gp_timer *timer)
Returns if timer is running.
Definition gp_timer.h:78
int gp_timer_queue_process(gp_timer **queue, uint64_t now)
Processes queue, all timers with expires <= now are processed.
A timer.
Definition gp_timer.h:26
uint32_t running
Definition gp_timer.h:42
uint32_t res_in_callback
Definition gp_timer.h:46
uint32_t(* callback)(struct gp_timer *self)
Timer callback.
Definition gp_timer.h:57
void * priv
Definition gp_timer.h:59
uint32_t in_callback
Definition gp_timer.h:44
uint64_t expires
Definition gp_timer.h:33
uint32_t period
Definition gp_timer.h:39
const char * id
Definition gp_timer.h:36
Common header for types.