merge from gcc
This commit is contained in:
parent
2bf63d0283
commit
f01b59ed06
7 changed files with 234 additions and 205 deletions
|
@ -1,3 +1,8 @@
|
|||
2001-08-21 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* fibheap.h: Tidy formatting.
|
||||
(fibnode_t): Limit degree to 31 bits to avoid warning.
|
||||
|
||||
2001-08-20 Daniel Berlin <dan@cgsoftware.com>
|
||||
|
||||
* fibheap.h: New file. Fibonacci heap.
|
||||
|
|
|
@ -19,13 +19,12 @@ along with GNU CC; see the file COPYING. If not, write to
|
|||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Fibonacci heaps are somewhat complex, but, there's an
|
||||
article in DDJ on them that explains them pretty well:
|
||||
/* Fibonacci heaps are somewhat complex, but, there's an article in
|
||||
DDJ that explains them pretty well:
|
||||
|
||||
http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms
|
||||
|
||||
Introduction to algorithms by Corman and Rivest also goes over
|
||||
them.
|
||||
Introduction to algorithms by Corman and Rivest also goes over them.
|
||||
|
||||
The original paper that introduced them is "Fibonacci heaps and their
|
||||
uses in improved network optimization algorithms" by Tarjan and
|
||||
|
@ -36,45 +35,47 @@ Boston, MA 02111-1307, USA. */
|
|||
ExtractMin: O(lg n) amortized. O(n) worst case.
|
||||
DecreaseKey: O(1) amortized. O(lg n) worst case.
|
||||
Insert: O(2) amortized. O(1) actual.
|
||||
Union: O(1) amortized. O(1) actual.
|
||||
|
||||
|
||||
*/
|
||||
Union: O(1) amortized. O(1) actual. */
|
||||
|
||||
#ifndef _FIBHEAP_H_
|
||||
#define _FIBHEAP_H_
|
||||
|
||||
#include <ansidecl.h>
|
||||
|
||||
typedef long fibheapkey_t;
|
||||
|
||||
typedef struct fibheap
|
||||
{
|
||||
size_t nodes;
|
||||
struct fibnode *min;
|
||||
struct fibnode *root;
|
||||
} *fibheap_t;
|
||||
typedef long fibheapkey_t;
|
||||
|
||||
typedef struct fibnode
|
||||
{
|
||||
struct fibnode *parent;
|
||||
struct fibnode *child;
|
||||
struct fibnode *left;
|
||||
struct fibnode *right;
|
||||
unsigned int degree : sizeof(size_t) * CHAR_BIT - 2;
|
||||
unsigned int mark:1;
|
||||
fibheapkey_t key;
|
||||
void *data;
|
||||
unsigned int degree : 31;
|
||||
unsigned int mark : 1;
|
||||
} *fibnode_t;
|
||||
|
||||
extern fibheap_t fibheap_new PARAMS ((void));
|
||||
extern fibnode_t fibheap_insert PARAMS ((fibheap_t, fibheapkey_t, void *));
|
||||
extern int fibheap_empty PARAMS ((fibheap_t));
|
||||
extern fibheapkey_t fibheap_min_key PARAMS ((fibheap_t));
|
||||
extern fibheapkey_t fibheap_replace_key PARAMS ((fibheap_t, fibnode_t, fibheapkey_t));
|
||||
extern void *fibheap_replace_key_data PARAMS ((fibheap_t, fibnode_t, fibheapkey_t, void *));
|
||||
extern fibheapkey_t fibheap_replace_key PARAMS ((fibheap_t, fibnode_t,
|
||||
fibheapkey_t));
|
||||
extern void *fibheap_replace_key_data PARAMS ((fibheap_t, fibnode_t,
|
||||
fibheapkey_t, void *));
|
||||
extern void *fibheap_extract_min PARAMS ((fibheap_t));
|
||||
extern void *fibheap_min PARAMS ((fibheap_t));
|
||||
extern void *fibheap_replace_data PARAMS ((fibheap_t, fibnode_t, void *));
|
||||
extern void *fibheap_delete_node PARAMS ((fibheap_t, fibnode_t));
|
||||
extern void fibheap_delete PARAMS ((fibheap_t));
|
||||
extern fibheap_t fibheap_union PARAMS ((fibheap_t, fibheap_t));
|
||||
|
||||
#endif /* _FIBHEAP_H_ */
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
2001-08-21 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* Makefile.in (fibheap.o): Depend on config.h.
|
||||
* fibheap.c: Tidy formatting. Use config.h.` Rearrange some
|
||||
functions for inlining.
|
||||
|
||||
Tue Aug 21 12:35:04 2001 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* configure.in: Need to set HAVE_SYS_ERRLIST and HAVE_SYS_NERR whenever
|
||||
hosting on cygwin.
|
||||
* configure: Regenerate.
|
||||
|
||||
2001-08-20 Daniel Berlin <dan@cgsoftware.com>
|
||||
|
||||
* fibheap.c: New file. Fibonacci heap.
|
||||
|
|
|
@ -265,7 +265,7 @@ cplus-dem.o: config.h $(INCDIR)/demangle.h
|
|||
cp-demangle.o: config.h $(INCDIR)/dyn-string.h $(INCDIR)/demangle.h
|
||||
dyn-string.o: config.h $(INCDIR)/dyn-string.h
|
||||
fdmatch.o: $(INCDIR)/libiberty.h
|
||||
fibheap.o: $(INCDIR)/libiberty.h $(INCDIR)/fibheap.h
|
||||
fibheap.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/fibheap.h
|
||||
fnmatch.o: config.h $(INCDIR)/fnmatch.h
|
||||
getcwd.o: config.h
|
||||
getopt.o: config.h $(INCDIR)/getopt.h
|
||||
|
|
124
libiberty/configure
vendored
124
libiberty/configure
vendored
|
@ -1812,15 +1812,6 @@ EOF
|
|||
EOF
|
||||
|
||||
|
||||
case "${host}" in
|
||||
*-*-cygwin*)
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_SYS_ERRLIST 1
|
||||
EOF
|
||||
|
||||
;;
|
||||
esac
|
||||
|
||||
setobjs=yes
|
||||
|
||||
fi
|
||||
|
@ -1834,6 +1825,19 @@ fi
|
|||
|
||||
|
||||
|
||||
case "${host}" in
|
||||
*-*-cygwin*)
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_SYS_ERRLIST 1
|
||||
EOF
|
||||
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_SYS_NERR 1
|
||||
EOF
|
||||
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "${setobjs}"; then
|
||||
case "${host}" in
|
||||
|
||||
|
@ -1925,7 +1929,7 @@ if test -z "${setobjs}"; then
|
|||
# We haven't set the list of objects yet. Use the standard autoconf
|
||||
# tests. This will only work if the compiler works.
|
||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
||||
echo "configure:1929: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||||
echo "configure:1933: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||||
|
||||
ac_ext=c
|
||||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||||
|
@ -1936,12 +1940,12 @@ cross_compiling=$ac_cv_prog_cc_cross
|
|||
|
||||
cat > conftest.$ac_ext << EOF
|
||||
|
||||
#line 1940 "configure"
|
||||
#line 1944 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
main(){return(0);}
|
||||
EOF
|
||||
if { (eval echo configure:1945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:1949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
ac_cv_prog_cc_works=yes
|
||||
# If we can't run a trivial program, we are probably using a cross compiler.
|
||||
if (./conftest; exit) 2>/dev/null; then
|
||||
|
@ -1967,19 +1971,19 @@ if test $ac_cv_prog_cc_works = no; then
|
|||
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
|
||||
fi
|
||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
||||
echo "configure:1971: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||
echo "configure:1975: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
|
||||
cross_compiling=$ac_cv_prog_cc_cross
|
||||
|
||||
for ac_func in $funcs
|
||||
do
|
||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||
echo "configure:1978: checking for $ac_func" >&5
|
||||
echo "configure:1982: checking for $ac_func" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1983 "configure"
|
||||
#line 1987 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char $ac_func(); below. */
|
||||
|
@ -2002,7 +2006,7 @@ $ac_func();
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:2010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_$ac_func=yes"
|
||||
else
|
||||
|
@ -2029,12 +2033,12 @@ done
|
|||
|
||||
|
||||
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
|
||||
echo "configure:2033: checking whether alloca needs Cray hooks" >&5
|
||||
echo "configure:2037: checking whether alloca needs Cray hooks" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2038 "configure"
|
||||
#line 2042 "configure"
|
||||
#include "confdefs.h"
|
||||
#if defined(CRAY) && ! defined(CRAY2)
|
||||
webecray
|
||||
|
@ -2059,12 +2063,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
|
|||
if test $ac_cv_os_cray = yes; then
|
||||
for ac_func in _getb67 GETB67 getb67; do
|
||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||
echo "configure:2063: checking for $ac_func" >&5
|
||||
echo "configure:2067: checking for $ac_func" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2068 "configure"
|
||||
#line 2072 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char $ac_func(); below. */
|
||||
|
@ -2087,7 +2091,7 @@ $ac_func();
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:2095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_$ac_func=yes"
|
||||
else
|
||||
|
@ -2113,7 +2117,7 @@ fi
|
|||
fi
|
||||
|
||||
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
|
||||
echo "configure:2117: checking stack direction for C alloca" >&5
|
||||
echo "configure:2121: checking stack direction for C alloca" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2121,7 +2125,7 @@ else
|
|||
ac_cv_c_stack_direction=0
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2125 "configure"
|
||||
#line 2129 "configure"
|
||||
#include "confdefs.h"
|
||||
find_stack_direction ()
|
||||
{
|
||||
|
@ -2140,7 +2144,7 @@ main ()
|
|||
exit (find_stack_direction() < 0);
|
||||
}
|
||||
EOF
|
||||
if { (eval echo configure:2144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_c_stack_direction=1
|
||||
else
|
||||
|
@ -2161,12 +2165,12 @@ EOF
|
|||
|
||||
|
||||
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
|
||||
echo "configure:2165: checking for ANSI C header files" >&5
|
||||
echo "configure:2169: checking for ANSI C header files" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2170 "configure"
|
||||
#line 2174 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -2174,7 +2178,7 @@ else
|
|||
#include <float.h>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:2178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:2182: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -2191,7 +2195,7 @@ rm -f conftest*
|
|||
if test $ac_cv_header_stdc = yes; then
|
||||
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2195 "configure"
|
||||
#line 2199 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <string.h>
|
||||
EOF
|
||||
|
@ -2209,7 +2213,7 @@ fi
|
|||
if test $ac_cv_header_stdc = yes; then
|
||||
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2213 "configure"
|
||||
#line 2217 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
EOF
|
||||
|
@ -2230,7 +2234,7 @@ if test "$cross_compiling" = yes; then
|
|||
:
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2234 "configure"
|
||||
#line 2238 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <ctype.h>
|
||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
|
@ -2241,7 +2245,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
|
|||
exit (0); }
|
||||
|
||||
EOF
|
||||
if { (eval echo configure:2245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
:
|
||||
else
|
||||
|
@ -2265,12 +2269,12 @@ EOF
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
|
||||
echo "configure:2269: checking for pid_t" >&5
|
||||
echo "configure:2273: checking for pid_t" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2274 "configure"
|
||||
#line 2278 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <sys/types.h>
|
||||
#if STDC_HEADERS
|
||||
|
@ -2299,17 +2303,17 @@ fi
|
|||
|
||||
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
|
||||
echo "configure:2303: checking for vfork.h" >&5
|
||||
echo "configure:2307: checking for vfork.h" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2308 "configure"
|
||||
#line 2312 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <vfork.h>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:2313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:2317: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -2334,18 +2338,18 @@ else
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
|
||||
echo "configure:2338: checking for working vfork" >&5
|
||||
echo "configure:2342: checking for working vfork" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
if test "$cross_compiling" = yes; then
|
||||
echo $ac_n "checking for vfork""... $ac_c" 1>&6
|
||||
echo "configure:2344: checking for vfork" >&5
|
||||
echo "configure:2348: checking for vfork" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2349 "configure"
|
||||
#line 2353 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char vfork(); below. */
|
||||
|
@ -2368,7 +2372,7 @@ vfork();
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:2376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_vfork=yes"
|
||||
else
|
||||
|
@ -2390,7 +2394,7 @@ fi
|
|||
ac_cv_func_vfork_works=$ac_cv_func_vfork
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2394 "configure"
|
||||
#line 2398 "configure"
|
||||
#include "confdefs.h"
|
||||
/* Thanks to Paul Eggert for this test. */
|
||||
#include <stdio.h>
|
||||
|
@ -2485,7 +2489,7 @@ main() {
|
|||
}
|
||||
}
|
||||
EOF
|
||||
if { (eval echo configure:2489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_func_vfork_works=yes
|
||||
else
|
||||
|
@ -2512,19 +2516,19 @@ fi
|
|||
fi
|
||||
for v in $vars; do
|
||||
echo $ac_n "checking for $v""... $ac_c" 1>&6
|
||||
echo "configure:2516: checking for $v" >&5
|
||||
echo "configure:2520: checking for $v" >&5
|
||||
if eval "test \"`echo '$''{'libiberty_cv_var_$v'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2521 "configure"
|
||||
#line 2525 "configure"
|
||||
#include "confdefs.h"
|
||||
int *p;
|
||||
int main() {
|
||||
extern int $v; p = &$v;
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:2532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "libiberty_cv_var_$v=yes"
|
||||
else
|
||||
|
@ -2550,12 +2554,12 @@ EOF
|
|||
for ac_func in $checkfuncs
|
||||
do
|
||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||
echo "configure:2554: checking for $ac_func" >&5
|
||||
echo "configure:2558: checking for $ac_func" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2559 "configure"
|
||||
#line 2563 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char $ac_func(); below. */
|
||||
|
@ -2578,7 +2582,7 @@ $ac_func();
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:2586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_$ac_func=yes"
|
||||
else
|
||||
|
@ -2608,17 +2612,17 @@ for ac_hdr in unistd.h
|
|||
do
|
||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||
echo "configure:2612: checking for $ac_hdr" >&5
|
||||
echo "configure:2616: checking for $ac_hdr" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2617 "configure"
|
||||
#line 2621 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:2622: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:2626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -2647,12 +2651,12 @@ done
|
|||
for ac_func in getpagesize
|
||||
do
|
||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||
echo "configure:2651: checking for $ac_func" >&5
|
||||
echo "configure:2655: checking for $ac_func" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2656 "configure"
|
||||
#line 2660 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char $ac_func(); below. */
|
||||
|
@ -2675,7 +2679,7 @@ $ac_func();
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:2683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_$ac_func=yes"
|
||||
else
|
||||
|
@ -2700,7 +2704,7 @@ fi
|
|||
done
|
||||
|
||||
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
|
||||
echo "configure:2704: checking for working mmap" >&5
|
||||
echo "configure:2708: checking for working mmap" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2708,7 +2712,7 @@ else
|
|||
ac_cv_func_mmap_fixed_mapped=no
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2712 "configure"
|
||||
#line 2716 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
/* Thanks to Mike Haertel and Jim Avera for this test.
|
||||
|
@ -2848,7 +2852,7 @@ main()
|
|||
}
|
||||
|
||||
EOF
|
||||
if { (eval echo configure:2852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_func_mmap_fixed_mapped=yes
|
||||
else
|
||||
|
@ -2872,7 +2876,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking for working strncmp""... $ac_c" 1>&6
|
||||
echo "configure:2876: checking for working strncmp" >&5
|
||||
echo "configure:2880: checking for working strncmp" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_strncmp_works'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2880,7 +2884,7 @@ else
|
|||
ac_cv_func_strncmp_works=no
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2884 "configure"
|
||||
#line 2888 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
/* Test by Jim Wilson and Kaveh Ghazi.
|
||||
|
@ -2941,7 +2945,7 @@ main ()
|
|||
}
|
||||
|
||||
EOF
|
||||
if { (eval echo configure:2945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_func_strncmp_works=yes
|
||||
else
|
||||
|
|
|
@ -177,12 +177,6 @@ if test -n "${with_target_subdir}"; then
|
|||
# Of the functions in $checkfuncs, newlib only has strerror.
|
||||
AC_DEFINE_NOAUTOHEADER(HAVE_STRERROR)
|
||||
|
||||
case "${host}" in
|
||||
*-*-cygwin*)
|
||||
AC_DEFINE(HAVE_SYS_ERRLIST)
|
||||
;;
|
||||
esac
|
||||
|
||||
setobjs=yes
|
||||
|
||||
fi
|
||||
|
@ -196,6 +190,13 @@ fi
|
|||
|
||||
AC_SUBST(CHECK)
|
||||
|
||||
case "${host}" in
|
||||
*-*-cygwin*)
|
||||
AC_DEFINE(HAVE_SYS_ERRLIST)
|
||||
AC_DEFINE(HAVE_SYS_NERR)
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "${setobjs}"; then
|
||||
case "${host}" in
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
/* A Fibonacci heap datatype.
|
||||
Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
Contributed by Daniel Berlin (dan@cgsoftware.com).
|
||||
|
@ -20,13 +19,24 @@ along with GNU CC; see the file COPYING. If not, write to
|
|||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Fibonacci heaps */
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#ifdef HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#endif
|
||||
#ifdef HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#include "libiberty.h"
|
||||
#include "fibheap.h"
|
||||
|
||||
|
||||
#define FIBHEAPKEY_MIN LONG_MIN
|
||||
|
||||
static void fibheap_init PARAMS ((fibheap_t));
|
||||
static void fibheap_ins_root PARAMS ((fibheap_t, fibnode_t));
|
||||
static void fibheap_rem_root PARAMS ((fibheap_t, fibnode_t));
|
||||
|
@ -36,13 +46,25 @@ static void fibheap_cut PARAMS ((fibheap_t, fibnode_t, fibnode_t));
|
|||
static void fibheap_cascading_cut PARAMS ((fibheap_t, fibnode_t));
|
||||
static fibnode_t fibheap_extr_min_node PARAMS ((fibheap_t));
|
||||
static int fibheap_compare PARAMS ((fibheap_t, fibnode_t, fibnode_t));
|
||||
static int fibheap_comp_data PARAMS ((fibheap_t, fibheapkey_t, void *, fibnode_t));
|
||||
static int fibheap_comp_data PARAMS ((fibheap_t, fibheapkey_t, void *,
|
||||
fibnode_t));
|
||||
static fibnode_t fibnode_new PARAMS ((void));
|
||||
static void fibnode_init PARAMS ((fibnode_t));
|
||||
static void fibnode_insert_after PARAMS ((fibnode_t, fibnode_t));
|
||||
#define fibnode_insert_before(a, b) fibnode_insert_after (a->left, b)
|
||||
static fibnode_t fibnode_remove PARAMS ((fibnode_t));
|
||||
|
||||
|
||||
/* Initialize the passed in fibonacci heap. */
|
||||
static inline void
|
||||
fibheap_init (heap)
|
||||
fibheap_t heap;
|
||||
{
|
||||
heap->nodes = 0;
|
||||
heap->min = NULL;
|
||||
heap->root = NULL;
|
||||
}
|
||||
|
||||
/* Create a new fibonacci heap. */
|
||||
fibheap_t
|
||||
fibheap_new ()
|
||||
|
@ -57,14 +79,60 @@ fibheap_new ()
|
|||
return result;
|
||||
}
|
||||
|
||||
/* Initialize the passed in fibonacci heap. */
|
||||
static void
|
||||
fibheap_init (heap)
|
||||
fibheap_t heap;
|
||||
/* Initialize the passed in fibonacci heap node. */
|
||||
static inline void
|
||||
fibnode_init (node)
|
||||
fibnode_t node;
|
||||
{
|
||||
heap->nodes = 0;
|
||||
heap->min = NULL;
|
||||
heap->root = NULL;
|
||||
node->degree = 0;
|
||||
node->mark = 0;
|
||||
node->parent = NULL;
|
||||
node->child = NULL;
|
||||
node->left = node;
|
||||
node->right = node;
|
||||
node->data = NULL;
|
||||
}
|
||||
|
||||
/* Create a new fibonacci heap node. */
|
||||
static inline fibnode_t
|
||||
fibnode_new ()
|
||||
{
|
||||
fibnode_t e;
|
||||
|
||||
if ((e = xmalloc (sizeof *e)) == NULL)
|
||||
return NULL;
|
||||
|
||||
fibnode_init (e);
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
static inline int
|
||||
fibheap_compare (heap, a, b)
|
||||
fibheap_t heap ATTRIBUTE_UNUSED;
|
||||
fibnode_t a;
|
||||
fibnode_t b;
|
||||
{
|
||||
if (a->key < b->key)
|
||||
return -1;
|
||||
if (a->key > b->key)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
fibheap_comp_data (heap, key, data, b)
|
||||
fibheap_t heap;
|
||||
fibheapkey_t key;
|
||||
void *data;
|
||||
fibnode_t b;
|
||||
{
|
||||
struct fibnode a;
|
||||
|
||||
a.key = key;
|
||||
a.data = data;
|
||||
|
||||
return fibheap_compare (heap, &a, b);
|
||||
}
|
||||
|
||||
/* Insert DATA, with priority KEY, into HEAP. */
|
||||
|
@ -75,9 +143,11 @@ fibheap_insert (heap, key, data)
|
|||
void *data;
|
||||
{
|
||||
fibnode_t node;
|
||||
|
||||
/* Create the new node, if we fail, return NULL. */
|
||||
if ((node = fibnode_new ()) == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Set the node's data. */
|
||||
node->data = data;
|
||||
node->key = key;
|
||||
|
@ -85,8 +155,8 @@ fibheap_insert (heap, key, data)
|
|||
/* Insert it into the root list. */
|
||||
fibheap_ins_root (heap, node);
|
||||
|
||||
/* If their was no minimum, or this key is less than the min, it's the new
|
||||
min. */
|
||||
/* If their was no minimum, or this key is less than the min,
|
||||
it's the new min. */
|
||||
if (heap->min == NULL || node->key < heap->min->key)
|
||||
heap->min = node;
|
||||
|
||||
|
@ -123,28 +193,26 @@ fibheap_union (heapa, heapb)
|
|||
fibheap_t heapa;
|
||||
fibheap_t heapb;
|
||||
{
|
||||
fibnode_t temp;
|
||||
fibnode_t a_root, b_root, temp;
|
||||
|
||||
/* If one of the heaps is empty, the union is just the other heap. */
|
||||
if (heapa->root == NULL || heapb->root == NULL)
|
||||
if ((a_root = heapa->root) == NULL)
|
||||
{
|
||||
if (heapa->root == NULL)
|
||||
{
|
||||
free (heapa);
|
||||
return heapb;
|
||||
}
|
||||
else
|
||||
{
|
||||
free (heapb);
|
||||
return heapa;
|
||||
}
|
||||
free (heapa);
|
||||
return heapb;
|
||||
}
|
||||
if ((b_root = heapb->root) == NULL)
|
||||
{
|
||||
free (heapb);
|
||||
return heapa;
|
||||
}
|
||||
|
||||
/* Merge them to the next nodes on the opposite chain. */
|
||||
heapa->root->left->right = heapb->root;
|
||||
heapb->root->left->right = heapa->root;
|
||||
temp = heapa->root->left;
|
||||
heapa->root->left = heapb->root->left;
|
||||
heapb->root->left = temp;
|
||||
a_root->left->right = b_root;
|
||||
b_root->left->right = a_root;
|
||||
temp = a_root->left;
|
||||
a_root->left = b_root->left;
|
||||
b_root->left = temp;
|
||||
heapa->nodes += heapb->nodes;
|
||||
|
||||
/* And set the new minimum, if it's changed. */
|
||||
|
@ -161,9 +229,8 @@ fibheap_extract_min (heap)
|
|||
fibheap_t heap;
|
||||
{
|
||||
fibnode_t z;
|
||||
void *ret;
|
||||
void *ret = NULL;
|
||||
|
||||
ret = NULL;
|
||||
/* If we don't have a min set, it means we have no nodes. */
|
||||
if (heap->min != NULL)
|
||||
{
|
||||
|
@ -177,31 +244,6 @@ fibheap_extract_min (heap)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* Replace the DATA associated with NODE. */
|
||||
void *
|
||||
fibheap_replace_data (heap, node, data)
|
||||
fibheap_t heap;
|
||||
fibnode_t node;
|
||||
void *data;
|
||||
{
|
||||
return fibheap_replace_key_data (heap, node, node->key, data);
|
||||
}
|
||||
|
||||
/* Replace the KEY associated with NODE. */
|
||||
fibheapkey_t
|
||||
fibheap_replace_key (heap, node, key)
|
||||
fibheap_t heap;
|
||||
fibnode_t node;
|
||||
fibheapkey_t key;
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = node->key;
|
||||
(void) fibheap_replace_key_data (heap, node, key, node->data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Replace both the KEY and the DATA associated with NODE. */
|
||||
void *
|
||||
fibheap_replace_key_data (heap, node, key, data)
|
||||
|
@ -244,19 +286,41 @@ fibheap_replace_key_data (heap, node, key, data)
|
|||
return odata;
|
||||
}
|
||||
|
||||
/* Replace the DATA associated with NODE. */
|
||||
void *
|
||||
fibheap_replace_data (heap, node, data)
|
||||
fibheap_t heap;
|
||||
fibnode_t node;
|
||||
void *data;
|
||||
{
|
||||
return fibheap_replace_key_data (heap, node, node->key, data);
|
||||
}
|
||||
|
||||
/* Replace the KEY associated with NODE. */
|
||||
fibheapkey_t
|
||||
fibheap_replace_key (heap, node, key)
|
||||
fibheap_t heap;
|
||||
fibnode_t node;
|
||||
fibheapkey_t key;
|
||||
{
|
||||
int okey = node->key;
|
||||
fibheap_replace_key_data (heap, node, key, node->data);
|
||||
return okey;
|
||||
}
|
||||
|
||||
/* Delete NODE from HEAP. */
|
||||
void *
|
||||
fibheap_delete_node (heap, node)
|
||||
fibheap_t heap;
|
||||
fibnode_t node;
|
||||
{
|
||||
void *k;
|
||||
void *ret = node->data;
|
||||
|
||||
/* To perform delete, we just make it the min key, and extract. */
|
||||
k = node->data;
|
||||
fibheap_replace_key (heap, node, LONG_MIN);
|
||||
fibheap_replace_key (heap, node, FIBHEAPKEY_MIN);
|
||||
fibheap_extract_min (heap);
|
||||
|
||||
return k;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Delete HEAP. */
|
||||
|
@ -278,32 +342,29 @@ fibheap_empty (heap)
|
|||
return heap->nodes == 0;
|
||||
}
|
||||
|
||||
|
||||
/* Extract the minimum node of the heap. */
|
||||
static fibnode_t
|
||||
fibheap_extr_min_node (heap)
|
||||
fibheap_t heap;
|
||||
{
|
||||
fibnode_t ret;
|
||||
fibnode_t ret = heap->min;
|
||||
fibnode_t x, y, orig;
|
||||
|
||||
ret = heap->min;
|
||||
|
||||
orig = NULL;
|
||||
/* Attach the child list of the minimum node to the root list of the heap.
|
||||
If there is no child list, we don't do squat. */
|
||||
for (x = ret->child; x != orig && x != NULL;)
|
||||
for (x = ret->child, orig = NULL; x != orig && x != NULL; x = y)
|
||||
{
|
||||
if (orig == NULL)
|
||||
orig = x;
|
||||
y = x->right;
|
||||
x->parent = NULL;
|
||||
fibheap_ins_root (heap, x);
|
||||
x = y;
|
||||
}
|
||||
|
||||
/* Remove the old root. */
|
||||
fibheap_rem_root (heap, ret);
|
||||
heap->nodes--;
|
||||
|
||||
/* If we are left with no nodes, then the min is NULL. */
|
||||
if (heap->nodes == 0)
|
||||
heap->min = NULL;
|
||||
|
@ -333,8 +394,9 @@ fibheap_ins_root (heap, node)
|
|||
node->right = node;
|
||||
return;
|
||||
}
|
||||
/* Otherwise, insert it in the circular root list between the root and it's
|
||||
right node. */
|
||||
|
||||
/* Otherwise, insert it in the circular root list between the root
|
||||
and it's right node. */
|
||||
fibnode_insert_after (heap->root, node);
|
||||
}
|
||||
|
||||
|
@ -450,33 +512,6 @@ fibheap_cascading_cut (heap, y)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static fibnode_t
|
||||
fibnode_new ()
|
||||
{
|
||||
fibnode_t e;
|
||||
|
||||
if ((e = xmalloc (sizeof *e)) == NULL)
|
||||
return NULL;
|
||||
|
||||
fibnode_init (e);
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
static void
|
||||
fibnode_init (node)
|
||||
fibnode_t node;
|
||||
{
|
||||
node->degree = 0;
|
||||
node->mark = 0;
|
||||
node->parent = NULL;
|
||||
node->child = NULL;
|
||||
node->left = node;
|
||||
node->right = node;
|
||||
node->data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
fibnode_insert_after (a, b)
|
||||
fibnode_t a;
|
||||
|
@ -498,7 +533,6 @@ fibnode_insert_after (a, b)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static fibnode_t
|
||||
fibnode_remove (node)
|
||||
fibnode_t node;
|
||||
|
@ -522,31 +556,3 @@ fibnode_remove (node)
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
fibheap_compare (heap, a, b)
|
||||
fibheap_t heap ATTRIBUTE_UNUSED;
|
||||
fibnode_t a;
|
||||
fibnode_t b;
|
||||
{
|
||||
if (a->key < b->key)
|
||||
return -1;
|
||||
if (a->key > b->key)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
fibheap_comp_data (heap, key, data, b)
|
||||
fibheap_t heap;
|
||||
fibheapkey_t key;
|
||||
void *data;
|
||||
fibnode_t b;
|
||||
{
|
||||
struct fibnode a;
|
||||
|
||||
a.key = key;
|
||||
a.data = data;
|
||||
|
||||
return fibheap_compare (heap, &a, b);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue