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
49 void *_priv;
50
57 uint32_t (*callback)(struct gp_timer *self);
58
60 void *priv;
61
71 void (*stopped)(gp_timer *self);
72};
73
74#define GP_TIMER_DECLARE(name, texpires, tperiod, tid, tcallback, tpriv) \
75 gp_timer name = { \
76 .expires = texpires, \
77 .period = tperiod, \
78 .id = tid, \
79 .callback = tcallback, \
80 .priv = tpriv \
81 }
90static inline int gp_timer_is_running(gp_timer *timer)
91{
92 return timer->running;
93}
94
101
118void gp_timer_queue_ins(gp_timer **queue, uint64_t now, gp_timer *timer);
119
132
143int gp_timer_queue_process(gp_timer **queue, uint64_t now);
144
151static inline unsigned int gp_timer_queue_size(gp_timer *queue)
152{
153 return queue ? queue->heap.children + 1 : 0;
154}
155
156#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:151
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_is_running(gp_timer *timer)
Returns if timer is running.
Definition gp_timer.h:90
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:60
uint32_t in_callback
Definition gp_timer.h:44
void * _priv
Library private pointer. Do not touch!
Definition gp_timer.h:49
uint64_t expires
Definition gp_timer.h:33
uint32_t period
Definition gp_timer.h:39
const char * id
Definition gp_timer.h:36
void(* stopped)(gp_timer *self)
An optional function to cleanup when timer is stopped.
Definition gp_timer.h:71
Common header for types.