Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/backend/parser/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 57 kB image not shown  

Quelle  binaryheap.h

  Sprache: C
 

/*
 * binaryheap.h
 *
 * A simple binary heap implementation
 *
 * Portions Copyright (c) 2012-2025, PostgreSQL Global Development Group
 *
 * src/include/lib/binaryheap.h
 */


#ifndef BINARYHEAP_H
#define BINARYHEAP_H

/*
 * We provide a Datum-based API for backend code and a void *-based API for
 * frontend code (since the Datum definitions are not available to frontend
 * code).  You should typically avoid using bh_node_type directly and instead
 * use Datum or void * as appropriate.
 */

#ifdef FRONTEND
typedef void *bh_node_type;
#else
typedef Datum bh_node_type;
#endif

/*
 * For a max-heap, the comparator must return <0 iff a < b, 0 iff a == b,
 * and >0 iff a > b.  For a min-heap, the conditions are reversed.
 */

typedef int (*binaryheap_comparator) (bh_node_type a, bh_node_type b, void *arg);

/*
 * binaryheap
 *
 *  bh_size   how many nodes are currently in "nodes"
 *  bh_space  how many nodes can be stored in "nodes"
 *  bh_has_heap_property no unordered operations since last heap build
 *  bh_compare  comparison function to define the heap property
 *  bh_arg   user data for comparison function
 *  bh_nodes  variable-length array of "space" nodes
 */

typedef struct binaryheap
{
 int   bh_size;
 int   bh_space;
 bool  bh_has_heap_property; /* debugging cross-check */
 binaryheap_comparator bh_compare;
 void    *bh_arg;
 bh_node_type bh_nodes[FLEXIBLE_ARRAY_MEMBER];
} binaryheap;

extern binaryheap *binaryheap_allocate(int capacity,
            binaryheap_comparator compare,
            void *arg);
extern void binaryheap_reset(binaryheap *heap);
extern void binaryheap_free(binaryheap *heap);
extern void binaryheap_add_unordered(binaryheap *heap, bh_node_type d);
extern void binaryheap_build(binaryheap *heap);
extern void binaryheap_add(binaryheap *heap, bh_node_type d);
extern bh_node_type binaryheap_first(binaryheap *heap);
extern bh_node_type binaryheap_remove_first(binaryheap *heap);
extern void binaryheap_remove_node(binaryheap *heap, int n);
extern void binaryheap_replace_first(binaryheap *heap, bh_node_type d);

#define binaryheap_empty(h)   ((h)->bh_size == 0)
#define binaryheap_size(h)   ((h)->bh_size)
#define binaryheap_get_node(h, n) ((h)->bh_nodes[n])

#endif       /* BINARYHEAP_H */

Messung V0.5 in Prozent
C=92 H=100 G=95

¤ Dauer der Verarbeitung: 0.16 Sekunden  (vorverarbeitet am  2026-08-06) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.