]> git.proxmox.com Git - libgit2.git/blame - src/util/pqueue.h
Merge https://salsa.debian.org/debian/libgit2 into proxmox/bullseye
[libgit2.git] / src / util / pqueue.h
CommitLineData
71db842f 1/*
359fc2d2 2 * Copyright (C) the libgit2 contributors. All rights reserved.
71db842f 3 *
bb742ede
VM
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
71db842f 6 */
71db842f
VM
7#ifndef INCLUDE_pqueue_h__
8#define INCLUDE_pqueue_h__
9
ad5611d8 10#include "git2_util.h"
eae0bfdc 11
4075e060 12#include "vector.h"
71db842f 13
882c7742 14typedef git_vector git_pqueue;
71db842f 15
4075e060 16enum {
882c7742 17 /* flag meaning: don't grow heap, keep highest values only */
e579e0f7 18 GIT_PQUEUE_FIXED_SIZE = (GIT_VECTOR_FLAG_MAX << 1)
4075e060 19};
71db842f
VM
20
21/**
4075e060 22 * Initialize priority queue
71db842f 23 *
4075e060
RB
24 * @param pq The priority queue struct to initialize
25 * @param flags Flags (see above) to control queue behavior
882c7742 26 * @param init_size The initial queue size
4075e060
RB
27 * @param cmp The entry priority comparison function
28 * @return 0 on success, <0 on error
71db842f 29 */
4075e060
RB
30extern int git_pqueue_init(
31 git_pqueue *pq,
32 uint32_t flags,
882c7742 33 size_t init_size,
4075e060 34 git_vector_cmp cmp);
71db842f 35
882c7742
RB
36#define git_pqueue_free git_vector_free
37#define git_pqueue_clear git_vector_clear
38#define git_pqueue_size git_vector_length
39#define git_pqueue_get git_vector_get
0bd43371 40#define git_pqueue_reverse git_vector_reverse
71db842f
VM
41
42/**
4075e060
RB
43 * Insert a new item into the queue
44 *
45 * @param pq The priority queue
46 * @param item Pointer to the item data
47 * @return 0 on success, <0 on failure
71db842f 48 */
4075e060 49extern int git_pqueue_insert(git_pqueue *pq, void *item);
71db842f
VM
50
51/**
4075e060
RB
52 * Remove the top item in the priority queue
53 *
54 * @param pq The priority queue
55 * @return item from heap on success, NULL if queue is empty
71db842f 56 */
4075e060 57extern void *git_pqueue_pop(git_pqueue *pq);
71db842f 58
4075e060 59#endif