]>
Commit | Line | Data |
---|---|---|
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 | ||
eae0bfdc PP |
10 | #include "common.h" |
11 | ||
4075e060 | 12 | #include "vector.h" |
71db842f | 13 | |
882c7742 | 14 | typedef git_vector git_pqueue; |
71db842f | 15 | |
4075e060 | 16 | enum { |
882c7742 RB |
17 | /* flag meaning: don't grow heap, keep highest values only */ |
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 |
30 | extern 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 | 49 | extern 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 | 57 | extern void *git_pqueue_pop(git_pqueue *pq); |
71db842f | 58 | |
4075e060 | 59 | #endif |