| /* |
| * Copyright (C) 2009-2011 the libgit2 contributors |
| * |
| * This file is part of libgit2, distributed under the GNU GPL v2 with |
| * a Linking Exception. For full terms see the included COPYING file. |
| */ |
| |
| #ifndef INCLUDE_pqueue_h__ |
| #define INCLUDE_pqueue_h__ |
| |
| /** callback functions to get/set/compare the priority of an element */ |
| typedef int (*git_pqueue_cmp)(void *a, void *b); |
| |
| /** the priority queue handle */ |
| typedef struct { |
| size_t size, avail, step; |
| git_pqueue_cmp cmppri; |
| void **d; |
| } git_pqueue; |
| |
| |
| /** |
| * initialize the queue |
| * |
| * @param n the initial estimate of the number of queue items for which memory |
| * should be preallocated |
| * @param cmppri the callback function to compare two nodes of the queue |
| * |
| * @Return the handle or NULL for insufficent memory |
| */ |
| int git_pqueue_init(git_pqueue *q, size_t n, git_pqueue_cmp cmppri); |
| |
| |
| /** |
| * free all memory used by the queue |
| * @param q the queue |
| */ |
| void git_pqueue_free(git_pqueue *q); |
| |
| /** |
| * clear all the elements in the queue |
| * @param q the queue |
| */ |
| void git_pqueue_clear(git_pqueue *q); |
| |
| /** |
| * return the size of the queue. |
| * @param q the queue |
| */ |
| size_t git_pqueue_size(git_pqueue *q); |
| |
| |
| /** |
| * insert an item into the queue. |
| * @param q the queue |
| * @param d the item |
| * @return 0 on success |
| */ |
| int git_pqueue_insert(git_pqueue *q, void *d); |
| |
| |
| /** |
| * pop the highest-ranking item from the queue. |
| * @param p the queue |
| * @param d where to copy the entry to |
| * @return NULL on error, otherwise the entry |
| */ |
| void *git_pqueue_pop(git_pqueue *q); |
| |
| |
| /** |
| * access highest-ranking item without removing it. |
| * @param q the queue |
| * @param d the entry |
| * @return NULL on error, otherwise the entry |
| */ |
| void *git_pqueue_peek(git_pqueue *q); |
| |
| #endif /* PQUEUE_H */ |
| /** @} */ |
| |