/*
 * Copyright (C) the libgit2 contributors.  All rights reserved.
 *
 * 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__

#include "vector.h"

typedef git_vector git_pqueue;

enum {
	/* flag meaning: don't grow heap, keep highest values only */
	GIT_PQUEUE_FIXED_SIZE = (GIT_VECTOR_FLAG_MAX << 1),
};

/**
 * Initialize priority queue
 *
 * @param pq The priority queue struct to initialize
 * @param flags Flags (see above) to control queue behavior
 * @param init_size The initial queue size
 * @param cmp The entry priority comparison function
 * @return 0 on success, <0 on error
 */
extern int git_pqueue_init(
	git_pqueue *pq,
	uint32_t flags,
	size_t init_size,
	git_vector_cmp cmp);

#define git_pqueue_free  git_vector_free
#define git_pqueue_clear git_vector_clear
#define git_pqueue_size  git_vector_length
#define git_pqueue_get   git_vector_get

/**
 * Insert a new item into the queue
 *
 * @param pq The priority queue
 * @param item Pointer to the item data
 * @return 0 on success, <0 on failure
 */
extern int git_pqueue_insert(git_pqueue *pq, void *item);

/**
 * Remove the top item in the priority queue
 *
 * @param pq The priority queue
 * @return item from heap on success, NULL if queue is empty
 */
extern void *git_pqueue_pop(git_pqueue *pq);

#endif
