/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of HDF5.  The full HDF5 copyright notice, including     *
 * terms governing use, modification, and redistribution, is contained in    *
 * the COPYING file, which can be found at the root of the source code       *
 * distribution tree, or in https://www.hdfgroup.org/licenses.               *
 * If you do not have access to either file, you may request a copy from     *
 * help@hdfgroup.org.                                                        *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/*
 * This file contains private information about the H5HP module
 */
#ifndef H5HPprivate_H
#define H5HPprivate_H

/**************************************/
/* Public headers needed by this file */
/**************************************/
#ifdef LATER
#include "H5HPpublic.h"
#endif /* LATER */

/***************************************/
/* Private headers needed by this file */
/***************************************/
#include "H5private.h"

/************/
/* Typedefs */
/************/

/* Typedef for heap struct (defined in H5HP.c) */
typedef struct H5HP_t H5HP_t;

/* Typedef for objects which can be inserted into heaps */
/* This _must_ be the first field in objects which can be inserted into heaps */
typedef struct H5HP_info_t {
    size_t heap_loc; /* Location of object in heap */
} H5HP_info_t;

/* Typedef for type of heap to create */
typedef enum {
    H5HP_MIN_HEAP, /* Minimum values in heap are at the "top" */
    H5HP_MAX_HEAP  /* Maximum values in heap are at the "top" */
} H5HP_type_t;

/**********/
/* Macros */
/**********/

/********************/
/* Private routines */
/********************/
H5_DLL H5HP_t *H5HP_create(H5HP_type_t heap_type);
H5_DLL herr_t  H5HP_insert(H5HP_t *heap, int val, void *obj);
H5_DLL ssize_t H5HP_count(const H5HP_t *heap);
H5_DLL herr_t  H5HP_top(const H5HP_t *heap, int *val);
H5_DLL herr_t  H5HP_remove(H5HP_t *heap, int *val, void **ptr);
H5_DLL herr_t  H5HP_change(H5HP_t *heap, int val, void *obj);
H5_DLL herr_t  H5HP_incr(H5HP_t *heap, unsigned amt, void *obj);
H5_DLL herr_t  H5HP_decr(H5HP_t *heap, unsigned amt, void *obj);
H5_DLL herr_t  H5HP_close(H5HP_t *heap);

#endif /* H5HPprivate_H */
