Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #pragma once 3 : : 4 : : #include <stdbool.h> 5 : : 6 : : #include "hashmap.h" 7 : : #include "macro.h" 8 : : 9 : : typedef struct Prioq Prioq; 10 : : 11 : : #define PRIOQ_IDX_NULL ((unsigned) -1) 12 : : 13 : : Prioq *prioq_new(compare_func_t compare); 14 : : Prioq *prioq_free(Prioq *q); 15 [ + - ]: 8 : DEFINE_TRIVIAL_CLEANUP_FUNC(Prioq*, prioq_free); 16 : : int prioq_ensure_allocated(Prioq **q, compare_func_t compare_func); 17 : : 18 : : int prioq_put(Prioq *q, void *data, unsigned *idx); 19 : : int prioq_remove(Prioq *q, void *data, unsigned *idx); 20 : : int prioq_reshuffle(Prioq *q, void *data, unsigned *idx); 21 : : 22 : : void *prioq_peek_by_index(Prioq *q, unsigned idx) _pure_; 23 : 3300231 : static inline void *prioq_peek(Prioq *q) { 24 : 3300231 : return prioq_peek_by_index(q, 0); 25 : : } 26 : : void *prioq_pop(Prioq *q); 27 : : 28 : : #define PRIOQ_FOREACH_ITEM(q, p) \ 29 : : for (unsigned _i = 0; (p = prioq_peek_by_index(q, _i)); _i++) 30 : : 31 : : unsigned prioq_size(Prioq *q) _pure_; 32 : : bool prioq_isempty(Prioq *q) _pure_;