Blame include/fibheap.h

Packit Service 706eca
/* A Fibonacci heap datatype.
Packit Service 706eca
   Copyright (C) 1998-2018 Free Software Foundation, Inc.
Packit Service 706eca
   Contributed by Daniel Berlin (dan@cgsoftware.com).
Packit Service 706eca
Packit Service 706eca
This file is part of GCC.
Packit Service 706eca
   
Packit Service 706eca
GCC is free software; you can redistribute it and/or modify it
Packit Service 706eca
under the terms of the GNU General Public License as published by
Packit Service 706eca
the Free Software Foundation; either version 2, or (at your option)
Packit Service 706eca
any later version.
Packit Service 706eca
Packit Service 706eca
GCC is distributed in the hope that it will be useful, but
Packit Service 706eca
WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 706eca
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 706eca
General Public License for more details.
Packit Service 706eca
Packit Service 706eca
You should have received a copy of the GNU General Public License
Packit Service 706eca
along with GCC; see the file COPYING.  If not, write to
Packit Service 706eca
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Packit Service 706eca
Boston, MA 02110-1301, USA.  */
Packit Service 706eca
Packit Service 706eca
/* Fibonacci heaps are somewhat complex, but, there's an article in
Packit Service 706eca
   DDJ that explains them pretty well:
Packit Service 706eca
Packit Service 706eca
   http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms
Packit Service 706eca
Packit Service 706eca
   Introduction to algorithms by Corman and Rivest also goes over them.
Packit Service 706eca
Packit Service 706eca
   The original paper that introduced them is "Fibonacci heaps and their
Packit Service 706eca
   uses in improved network optimization algorithms" by Tarjan and
Packit Service 706eca
   Fredman (JACM 34(3), July 1987).
Packit Service 706eca
Packit Service 706eca
   Amortized and real worst case time for operations:
Packit Service 706eca
Packit Service 706eca
   ExtractMin: O(lg n) amortized. O(n) worst case.
Packit Service 706eca
   DecreaseKey: O(1) amortized.  O(lg n) worst case. 
Packit Service 706eca
   Insert: O(2) amortized. O(1) actual.  
Packit Service 706eca
   Union: O(1) amortized. O(1) actual.  */
Packit Service 706eca
Packit Service 706eca
#ifndef _FIBHEAP_H_
Packit Service 706eca
#define _FIBHEAP_H_
Packit Service 706eca
Packit Service 706eca
#include "ansidecl.h"
Packit Service 706eca
Packit Service 706eca
#ifdef __cplusplus
Packit Service 706eca
extern "C" {
Packit Service 706eca
#endif
Packit Service 706eca
Packit Service 706eca
typedef long fibheapkey_t;
Packit Service 706eca
Packit Service 706eca
typedef struct fibheap
Packit Service 706eca
{
Packit Service 706eca
  size_t nodes;
Packit Service 706eca
  struct fibnode *min;
Packit Service 706eca
  struct fibnode *root;
Packit Service 706eca
} *fibheap_t;
Packit Service 706eca
Packit Service 706eca
typedef struct fibnode
Packit Service 706eca
{
Packit Service 706eca
  struct fibnode *parent;
Packit Service 706eca
  struct fibnode *child;
Packit Service 706eca
  struct fibnode *left;
Packit Service 706eca
  struct fibnode *right;
Packit Service 706eca
  fibheapkey_t key;
Packit Service 706eca
  void *data;
Packit Service 706eca
#if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4)
Packit Service 706eca
  __extension__ unsigned long int degree : 31;
Packit Service 706eca
  __extension__ unsigned long int mark : 1;
Packit Service 706eca
#else
Packit Service 706eca
  unsigned int degree : 31;
Packit Service 706eca
  unsigned int mark : 1;
Packit Service 706eca
#endif
Packit Service 706eca
} *fibnode_t;
Packit Service 706eca
Packit Service 706eca
extern fibheap_t fibheap_new (void);
Packit Service 706eca
extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *);
Packit Service 706eca
extern int fibheap_empty (fibheap_t);
Packit Service 706eca
extern fibheapkey_t fibheap_min_key (fibheap_t);
Packit Service 706eca
extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t,
Packit Service 706eca
                                         fibheapkey_t);
Packit Service 706eca
extern void *fibheap_replace_key_data (fibheap_t, fibnode_t,
Packit Service 706eca
                                       fibheapkey_t, void *);
Packit Service 706eca
extern void *fibheap_extract_min (fibheap_t);
Packit Service 706eca
extern void *fibheap_min (fibheap_t);
Packit Service 706eca
extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *);
Packit Service 706eca
extern void *fibheap_delete_node (fibheap_t, fibnode_t);
Packit Service 706eca
extern void fibheap_delete (fibheap_t);
Packit Service 706eca
extern fibheap_t fibheap_union (fibheap_t, fibheap_t);
Packit Service 706eca
Packit Service 706eca
#ifdef __cplusplus
Packit Service 706eca
}
Packit Service 706eca
#endif
Packit Service 706eca
Packit Service 706eca
#endif /* _FIBHEAP_H_ */