lsquic_min_heap.h revision e8bd737d
1e8bd737dSDmitri Tikhonov/* Copyright (c) 2017 - 2018 LiteSpeed Technologies Inc.  See LICENSE. */
2e8bd737dSDmitri Tikhonov/*
3e8bd737dSDmitri Tikhonov * lsquic_min_heap.h -- Min-heap for connections
4e8bd737dSDmitri Tikhonov */
5e8bd737dSDmitri Tikhonov
6e8bd737dSDmitri Tikhonov#ifndef LSQUIC_MIN_HEAP_H
7e8bd737dSDmitri Tikhonov#define LSQUIC_MIN_HEAP_H 1
8e8bd737dSDmitri Tikhonov
9e8bd737dSDmitri Tikhonovstruct lsquic_conn;
10e8bd737dSDmitri Tikhonov
11e8bd737dSDmitri Tikhonovstruct min_heap_elem
12e8bd737dSDmitri Tikhonov{
13e8bd737dSDmitri Tikhonov    struct lsquic_conn  *mhe_conn;
14e8bd737dSDmitri Tikhonov    uint64_t             mhe_val;
15e8bd737dSDmitri Tikhonov};
16e8bd737dSDmitri Tikhonov
17e8bd737dSDmitri Tikhonov
18e8bd737dSDmitri Tikhonovstruct min_heap
19e8bd737dSDmitri Tikhonov{
20e8bd737dSDmitri Tikhonov    struct min_heap_elem    *mh_elems;
21e8bd737dSDmitri Tikhonov    unsigned                 mh_nalloc,
22e8bd737dSDmitri Tikhonov                             mh_nelem;
23e8bd737dSDmitri Tikhonov};
24e8bd737dSDmitri Tikhonov
25e8bd737dSDmitri Tikhonov
26e8bd737dSDmitri Tikhonovvoid
27e8bd737dSDmitri Tikhonovlsquic_mh_insert (struct min_heap *, struct lsquic_conn *conn, uint64_t val);
28e8bd737dSDmitri Tikhonov
29e8bd737dSDmitri Tikhonovstruct lsquic_conn *
30e8bd737dSDmitri Tikhonovlsquic_mh_pop (struct min_heap *);
31e8bd737dSDmitri Tikhonov
32e8bd737dSDmitri Tikhonov#define lsquic_mh_count(heap) (+(heap)->mh_nelem)
33e8bd737dSDmitri Tikhonov
34e8bd737dSDmitri Tikhonov#define lsquic_mh_nalloc(heap) (+(heap)->mh_nalloc)
35e8bd737dSDmitri Tikhonov
36e8bd737dSDmitri Tikhonov#endif
37